gpt4 book ai didi

c# - 无法从 MSBuild 引用 Nuget 包的 "tools"文件夹中的可执行文件

转载 作者:行者123 更新时间:2023-12-05 00:15:04 27 4
gpt4 key购买 nike

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

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

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

这有效并创建了一个 Nuget 包,其中包含我在“工具”目录中的可执行文件。问题是包含文件夹包含会经常更改的 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# 类派生的接口(interface)。必须在构建 Web 项目之前创建 TypeScript 文件,因为 Web 项目中的 TypeScript 代码取决于此输出中包含的接口(interface)。我愿意接受更优雅的方法来解决这个问题的建议,但我仍然想知道如何解决引用问题。

最佳答案

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

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

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

关于c# - 无法从 MSBuild 引用 Nuget 包的 "tools"文件夹中的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com