繁体   English   中英

无法从MSBuild引用Nuget包的“tools”文件夹中的可执行文件

[英]Can't reference an executable in the “tools” folder of a Nuget package from MSBuild

我有一个C#控制台应用程序项目,我试图将其转换为Nuget包,以便我的团队中的多个项目可以在.csproj文件中的AfterResolveReferences步骤中调用此项目中的可执行文件。

我已经使用.nuspec文件创建了Nuget包,看起来像这样:

<package ...>
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="tools" />
  </files>
</package>

这将工作并创建一个Nuget包,其中包含我在“tools”目录中的可执行文件。 问题是包含文件夹包含将经常更改的Nuget包的版本号。 我试图在.csproj文件中像这样引用它:

<Target Name="AfterResolveReferences">
  <Exec Command="$(SolutionDir)packages\PackageName.1.2.3\tools\AssemblyName.exe" />
</Target>

当我在路径中包含PackageName.1.2.3时,它按预期工作,但这显然是一个非常脆弱的解决方案。 当我只使用“AssemblyName.exe”时,我得到“命令AssemblyName.exe退出代码9009”。

显然有一个简单的标准来做这种我不熟悉的事情 - MSBuild和Nuget不是我最强的套装,所以我非常感谢任何建议。

我实际上想要实现的是创建一个TypeScript文件,其中包含使用TypeLite.Lib包在我的模型项目中定义的C#类派生的接口。 必须在构建Web项目之前创建TypeScript文件,因为Web项目中的TypeScript代码取决于此输出中包含的接口。 我愿意接受更优雅的方法来解决这个问题,但我仍然想知道如何解决引用问题。

我们的想法是NuGet包应该是自包含的。 也就是说,在使用nuget包时,用户不需要向项目文件添加任何内容。

NuGet包还可以包含构建逻辑 - 如果将PackageName.targets文件放入build目录,它将自动包含在引用NuGet包的项目中。 从那里,您可以定义目标,并通常使用$(MSBuildThisFileDirectory)..\\tools\\MyTool.exe

这很重要,因为packages目录仅用于通过packages.config进行“经典”NuGet引用,而不是用于引用NuGet包的新式PackageReference方式,其中所有项目/解决方案共享用户级全局包缓存(无解决方案) - 本地副本)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM