Далее будет создан пакет nuget, который сохранит выбранные вами файлы вместе с dll вашего пакета, когда приложение-потребитель установит его, и это можно сделать полностью через интегрированную среду разработки Visual Studio 2017.
Предположим, что у вас есть проект C# с именем Foo.Bar в вашем решении, который вы хотите встроить в пакет nuget:
В Visual Studio щелкните правой кнопкой мыши проект Foo.Bar > Properties
и перейдите на вкладку Package
. Убедитесь, что значение Package id:
равно Foo.Bar
.
Создайте файл Foo.Bar.targets
в том же каталоге, что и ваш файл Foo.Bar.csproj
, со следующим содержимым:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\MyFile.txt">
<Link>MyFile.txt</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Щелкните правой кнопкой мыши проект в Visual Studio 2017 и выберите Edit Foo.Bar.csproj
. Поместите следующий блок в открытый файл проекта:
<ItemGroup>
<None Include="MyFile.txt">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</None>
<None Include="Foo.Bar.targets">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</None>
</ItemGroup>
Теперь, когда вы щелкните проект правой кнопкой мыши и выберите Pack
(или если вы запустите dotnet pack
из командной строки в каталоге, где находится ваш проект), он сгенерирует файл .nupkg
для вашего проекта Foo.Bar
. MyFile.txt
и Foo.Bar.targets
будут в папке build
внутри него.
В качестве теста я установил его в пример проекта консольного приложения. После этого MyFile.txt
появится в обозревателе решений консольного приложения, и его можно открыть и отредактировать. Кроме того, если я публикую консольное приложение, Foo.Bar.dll
и MyFile.txt
находятся в папке bin > Release > [TargetFramework] > publish
опубликованных файлов (если они опубликованы с использованием профиля папки на локальном диске).
Интересно отметить, что на момент написания статьи, если вы щелкните правой кнопкой мыши MyFile.txt
в консольном приложении, в котором установлен пакет, и выберите Properties
, вы увидите, что Copy to Output Directory
установлено на Always
. Если я попытаюсь изменить его на Do Not Copy
или что-то еще, он вернется к Always
, когда диалоговое окно будет закрыто, несмотря на нажатие OK
. Это будет действовать так, как если бы вы нажимали Cancel
каждый раз. Это связано с изменением исходного файла Foo.Bar.csproj
, из которого был создан пакет nuget, а именно: <CopyToOutputDirectory>Always</CopyToOutputDirectory>
.
person
David Gunderson
schedule
10.08.2018