相关疑难解决方法(0)

如何在 MSBuild NuGet 包生成的 .nuspec 中注入自定义依赖项

我正在尝试迁移到使用 MSBuild Pack支持使用 .csproj 生成项目 NuGet 包,其中在开发过程中使用本地 .dll 来构建项目,但需要替换/交换它们以在生成的项目中引用外部 NuGet 包使用 MSBuild“打包”项目时的 .nuspec。

我能找到的该用例最接近的记录示例是Replacing one library from a Restore graph ,其中建议您可以替换外部 NuGet 引用:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)

它会覆盖包以引用本地.dll

<Reference Include="Newtonsoft.Json.dll" />
Run Code Online (Sandbox Code Playgroud)

我正在尝试做类似的事情,项目应该针对本地构建.dll's,这些本地项目是从依赖的 TeamCity/CI 构建中作为工件注入的:

<Reference Include="..\..\lib\net45\ServiceStack.Interfaces.dll" />
<Reference Include="..\..\lib\net45\ServiceStack.Text.dll" />
<Reference Include="..\..\lib\net45\ServiceStack.Common.dll" />
Run Code Online (Sandbox Code Playgroud)

但是当ExcludeAssets=All按照文档使用时:

<PackageReference Include="ServiceStack.Common" Version="5.0.0">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)

PackageReference 不会在生成的依赖项列表中导出,例如:

<group targetFramework=".NETFramework4.5" />
Run Code Online (Sandbox Code Playgroud)

我最接近获得首选行为的是使用ExcludeAssets="compile",这样我的本地项目就不会针对它进行构建,除了此行为也会导出到 .nuspec 中:

<group targetFramework=".NETFramework4.5">
  <dependency id="ServiceStack.Common" version="5.4.0" exclude="Compile,Build,Analyzers" />
</group>
Run Code Online (Sandbox Code Playgroud)

我只想避免在本地构建它,但将其作为正常依赖项导出。这种方法的另一个问题是我需要它引用尚未发布到 NuGet 的包(因为所有包都是锁定步骤发布的),例如:

<!-- …
Run Code Online (Sandbox Code Playgroud)

c# msbuild nuget

8
推荐指数
2
解决办法
1778
查看次数

标签 统计

c# ×1

msbuild ×1

nuget ×1