我正在尝试迁移到使用 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)