Nuget Pkg Dlls отсутствует в папке сборки в .Net Standard DLL Project.DLL не копировать локально?Исправить в Visual Studio 2019? - PullRequest
0 голосов
/ 24 сентября 2019

У меня Visual Studio 2019 Community Edition

Шаги для воспроизведения:

Я загружаю VS и запускаю новый проект стандартной библиотеки C # .Net.Я иду в Nuget Pkg Manager и устанавливаю ЛЮБОЙ пакет nuget.Я добавляю одну строку в Class1.cs, чтобы использовать Type из пакета.

Например, если я устанавливаю пакет с пустыми файлами WatsonTCP, я изменяю Class1.cs, чтобы он выглядел так:

using System;
using WatsonTcp;

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

Я нажал «Восстановить решение».Я проверяю папку bin / Debug, и там нет ни одного dll для пакета nuget.То же самое с bin / Release для сборки Release.

Я выполнил столько SO-проблем, сколько смог.Я прочитал документацию MSDN по nuget.

Я установил параметры сборки и запуска 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 является причиной, по которой ничего не выводится в сборкепапка.Но я не уверен на 100%.

SO в основном содержит более старые вопросы, относящиеся к эпохе, предшествующей «пакетной ссылке», до .Net Core и .Net Standard.В результате, всякий раз, когда я ищу проблемы, относящиеся к «CopyLocal», я получаю информацию о явной установке свойства CopyLocal в справочнике DLL.Я не нахожу ничего полезного, чтобы решить мою проблему с автоматическим определением CopyLocal системой Package Reference и системой RAR.

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 25 сентября 2019

Откройте ваш xx.csproj ( В VS, дважды щелкните имя проекта в обозревателе решений или щелкните правой кнопкой мыши проект => unload => edit ... ) и добавьте свойство 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>

Например: при использовании приведенного выше сценария будут скопированы log4net и NewTonSoft.Json, но не WatsonTcp в выходную папку.Подробнее см. github / dotnet / sdk # 2235 .

...