Может ли NuGet добавить CS-файл в целевой проект?

Я хочу создать пакет NuGet, который добавляет файл .cs (базовый класс, который потребителю пакета рекомендуется изменить позже) в корень целевого проекта во время установки.

Это возможно? Все, что я нашел до сих пор, говорит: «Нет, вы можете устанавливать файлы только ниже каталога пакета».


person lance    schedule 28.05.2012    source источник


Ответы (3)


Просто поместите файл .cs в папку с именем «content» в корне пакета.

из документов:

«Вы можете создать структуру каталогов, соответствующую соглашениям NuGet.

tools — папка tools пакета предназначена для скриптов и программ powershell, доступных из консоли диспетчера пакетов. После того, как папка скопирована в целевой проект, она добавляется в переменную окружения $env:Path (PATH).

lib — сборки (DLL-файлы) в папке lib добавляются в качестве ссылок на сборки при установке пакета.

content — файлы в папке содержимого копируются в корень вашего приложения при установке пакета.

Думайте о папке Content как о корне вашего целевого приложения. Например, если я хочу, чтобы пакет добавлял изображение в каталог /images целевого приложения, обязательно поместите изображение в папку Content/images пакета».

см.: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#From_a_convention_based_working_directory

person Alexandre Dion    schedule 29.05.2012
comment
Будет ли обновление пакета работать позже, когда я внесу изменения? - person feedc0de; 02.04.2015
comment
Имейте в виду, что содержимое копируется только при установке пакета, обновление/восстановление пакета не изменяет содержимое, поэтому содержимое нельзя обновить с помощью nuget. Nuget действительно полезен только для зависимостей сборки .net. - person trampster; 25.05.2015
comment
@trampster это все еще так и сегодня? Разрешают ли последние копии NuGet обновлять файлы содержимого? - person Todd; 23.01.2017
comment
@Todd, кажется, сейчас то же самое: http://blog.nuget.org/20151118/nuget-3.3.html#content-files - person tgarcia; 24.01.2017
comment
Возможно, вы захотите проверить это решение. Это особенно помогает, когда вы хотите добавить исходный код, который, как ожидается, не будет изменен. rhyous.com/2016 /03/03/nuget-for-source-using-add-as-link-1 - person Rhyous; 18.08.2017
comment
Это работает, когда целевой проект .netstandard? - person Kepboy; 13.04.2018

Вы также можете использовать раздел <files> nuspec, чтобы переместить файл в папку содержимого во время сборки пакета:

<?xml version="1.0"?>
<package>
  <metadata>
    ...
  </metadata>
  <files>
    <file src="App.Template.config" target="content" />
    <file src="Program.template.cs" target="content" />
  </files>
</package>
person Luk    schedule 24.10.2012
comment
Подстановочный знак каталога ** может быть полезен. Следующее копирует все подкаталоги каталога ./Assets в ./content/Assets в вашем пакете (и исключает все файлы с именем readme.txt). ‹file src=Assets/** target=content exclude=**/readme.txt /› - person stevieg; 26.11.2015
comment
Есть ли способ добиться этого в новом SDK dotnet без использования файла nuspec? - person thomasgalliker; 17.01.2019

Если вы создаете проект PackageReference, такой как библиотека netstandard2.0, должно работать следующее:

.nuspec-файл:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata minClientVersion="3.3.0">
    ...
    <contentFiles>
      <files include="**/Pages/Shared/*.*" buildAction="Content" />
    </contentFiles>
  </metadata>
  <files>
    <file src="bin\Release\netstandard2.0\*.dll" target="lib\netstandard2.0" />
    <file src="contentFiles\**\*" target="contentFiles" />
  </files>
</package>

Это скопирует папку contentFiles в проект. Вы можете указать разные файлы по языку программирования и платформе. Если вы хотите добавить ко всем из них, поместите файлы под contentFiles/any/any.

person androbin    schedule 25.09.2018