的NuGet PKG的dll中的.Net标准DLL项目从build文件夹丢失。 DLL是不复制本

2019-10-29 06:20发布

我的Visual Studio 2019社区版

重现步骤:

我加载了VS,并开始一个全新的C#.NET标准库项目。 我去的NuGet PKG经理和安装任何 NuGet包。 我添加一行到Class1.cs以使用类型从包中。

举例来说,如果我安装WatsonTCP NuGet包,我改变Class1.cs以这个样子:

using System;
using WatsonTcp;

namespace NugetTest
{
    public class Class1
    {
        public Class1()
        {
            WatsonTcpClient client = new WatsonTcpClient("", 0);
        }
    }
}

我打重建解决方案。 我检查的bin / Debug文件夹,并没有任何的dll的NuGet包都在那里。 同斌/释放一个发布版本同样的事情。

我经历了许多SO问题poored,我可以。 我读过的NuGet MSDN文档。

我把建立和运行的MSBuild设置详细。 在生成日志,我看到类似以下的输出为每一个DLL:

Primary reference "WatsonTcp, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null".
Resolved file path is "C:\Users\James\.nuget\packages\watsontcp\2.0.7\lib\netstandard2.0\WatsonTcp.dll".
Reference found at search path location "{HintPathFromItem}".
This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true".

我猜大约CopyLocal这个通知是什么原因正在build文件夹中输出。 但我不是100%肯定。

SO大多含有,涉及到对.NET核心和.Net标准之前预“包参考”的时代旧的问题。 其结果是,任何时候我搜索有关“CopyLocal”,我得到一个DLL参考明确设置CopyLocal属性信息的问题。 我没有找到任何有助于解决我的问题与卷装基准和RAR系统自动确定CopyLocal的。

任何人都可以帮忙吗?

Answer 1:

打开你的xx.csproj在VS,在解决方案资源管理器中双击该项目的名称,或右键单击项目=>卸载=>编辑...),并添加CopyLocalLockFileAssemblies财产进去,将其值设置为true ,它会复制过程中生成过程中从的NuGet包到输出文件夹中所有的组件。

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <!--Add this line-->
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

如果你在你的项目中有太多的NuGet包,你只需要其中的一部分,请尝试使用PrivateAssets="All" ,以防止从VS复制指定一个输出文件夹。

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <!--Add this line to copy everything.-->
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="log4net" Version="2.0.8" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3-beta1" />
    <PackageReference Include="WatsonTcp" Version="2.0.7" PrivateAssets="All"/>
  </ItemGroup>

例如:使用上面的脚本将复制log4netNewTonSoft.Json但不WatsonTcp到输出文件夹。 更多详情,请参阅github上/ DOTNET / SDK#2235 。



文章来源: Nuget Pkg Dlls Missing from Build Folder in .Net Standard DLL Project. dlls are Not Copy Local? Fix in Visual Studio 2019?