Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 内置VS 2017上的包不打包引用的程序集_.net_.net Core_Nuget_.net Standard - Fatal编程技术网

.net 内置VS 2017上的包不打包引用的程序集

.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

通过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


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的引用,那将是愚蠢的