.net 内置VS 2017上的包不打包引用的程序集
通过VS 2017中.NET核心/标准项目中的“打包”选项卡,可以轻松地自动化项目打包。然而,可以理解的是,对解决方案中其他项目的引用并没有打包。使用此流打包依赖项的唯一方法是将每个依赖项发送到NuGet,从NuGet安装,删除解决方案依赖项引用NuGet,而不是程序集 我的问题: 在解决方案中有2个.NET标准项目A和B,其中B依赖于A,获得两个NUGET的最简单方法是什么?A.nupkg和B.nupkg,其中B.nupkg包含对A.nupkg的引用 编辑:对dll使用相同名称的PackageReference和ProjectReference是一个陷阱,但VS2017似乎只打包作为PackageReference添加的dll。我想使用本地文件构建一个解决方案,但使用PackageReference将B.nupkg打包为a.nupkg.net 内置VS 2017上的包不打包引用的程序集,.net,.net-core,nuget,.net-standard,.net,.net Core,Nuget,.net Standard,通过VS 2017中.NET核心/标准项目中的“打包”选项卡,可以轻松地自动化项目打包。然而,可以理解的是,对解决方案中其他项目的引用并没有打包。使用此流打包依赖项的唯一方法是将每个依赖项发送到NuGet,从NuGet安装,删除解决方案依赖项引用NuGet,而不是程序集 我的问题: 在解决方案中有2个.NET标准项目A和B,其中B依赖于A,获得两个NUGET的最简单方法是什么?A.nupkg和B.nupkg,其中B.nupkg包含对A.nupkg的引用 编辑:对dll使用相同名称的Package
EDIT2到目前为止,我将引用从project切换到NuGet、build和packaged,而不是切换回来。现在我认为这是浪费时间,我正在键入PS script调用具有所需目标的dotnet pack,但也许有更简单的方法,利用内置的“Package”选项卡?解决方案是添加新配置,如“pack”,而不是在*.projs中使用PackageReference重新绘制所有所需的项目引用 因此,首先:解决方案->人民币->配置管理器->从下拉列表中选择新配置 它将向.sln文件添加新的生成配置,并向所有*.proj文件添加适当的条目 在要为其构建包的每个项目中,添加如下互斥条件:
<ItemGroup>
<PackageReference Include="Stocks.Data.Model" Version="2.0.0" Condition="'$(Configuration)' == 'Pack'" />
<PackageReference Remove="Stocks.Data.Model" Version="2.0.0" Condition="'$(Configuration)' != 'Pack'" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Stocks.Data.Model\Stocks.Data.Model.csproj" Condition="'$(Configuration)' != 'Pack'" />
<ProjectReference Remove="..\Stocks.Data.Model\Stocks.Data.Model.csproj" Condition="'$(Configuration)' == 'Pack'" />
</ItemGroup>
正如您所看到的,这是相同的dll,只有一个来自NuGet,一个来自本地解决方案。通过这种方式,只需一次下拉更改,就可以构建具有适当依赖关系的所有NUGET。这是最干净的解决方案,利用内置机制。另外,不要忘记启用“在构建时生成NuGet包”以使其正常工作
请注意,当前VS将使用黄色警告图标暂时警告依赖项中添加的同名dll,但这是正确的,因为每个配置有一个dll-重新加载解决方案可修复此问题
参考资料:
这远远不是理想的,当然,您需要一个能够提供所有依赖项的包。VS2017工具远远不足以正确完成这项工作,而且他们似乎并不急于改进它。IncludeReferenced项目是关键,但它也有尖锐的边缘,参考问题。谢谢。它可能将它们打包为DLL,而我需要PackageReference。如果让Nuget Nuget B同时包含A.dll和B.dll istead,并且只包含对A.nupkg的引用,那将是愚蠢的