Как сказать nuget добавить файлы ресурсов пакета в качестве ссылок, а не копировать их в каталог проекта
введение (как упаковать ресурсы в пакет nuget)
чтобы упаковать некоторые файлы ресурсов в пакет nuget, что обычно делается, является следующим.
Поместите все файлы ресурсов в content
каталог пакета nuget. Это будет указано в следующей строке :
<files>
<file src="ProjectbinReleasescript.js" target="contentjsscript.js" />
<files>
теперь, когда этот пакет nuget устанавливается в AnotherProject
следующая структура файла появляется:
Solution.sln
packagesProject.1.0.0contentjsscript.js // the original resource file
AnotherProjectjsscript.js // a physical copy
AnotherProjectAnotherProject.csproj // <Content /> tag (see below)
во время установки пакета, AnotherProject.csproj
ввели тег:
<Content Include="jsscript.js" />
и это для физической копии исходного ресурса (который находится под ).
фактическая проблема (как упаковать ресурсы в пакет nuget в качестве ссылки)
моя цель-не иметь физической копии файла ресурсов в AnotherProject
каталог, а скорее "Ссылка" на исходный ресурс в разделе . В csproj, это должно выглядеть так:
<Content Include="packagesProject.1.0.0contentjsscript.js">
<Link>jsscript.js</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
решение грубой силы, которого я бы предпочел избежать
теперь, один" сделать это трудным путем " обходной путь, который я могу придумать:
- не помещать файлы ресурсов под
content
так они не добавляются автоматически, - писать
Install.ps1
скрипт, который взломает файловую структуру csproj и добавит необходимый фрагмент XML вручную,
это, однако, имеет следующие недостатки:
- все мои пакеты nuget нуждаются в одном и том же фрагменте скрипта в их
Install.ps1
, - при установке моих пакетов в Visual Studio появится неприятное "приглашение перезагрузки проекта".
1 ответов
поскольку NuGet в настоящее время не поддерживает это из коробки, ваши варианты либо использовать PowerShell, либо использовать настраиваемую цель MSBuild.
PowerShell
- оставьте свои ресурсы за пределами каталога содержимого в пакете NuGet (как вы уже предлагали).
- добавьте ссылку на файл с помощью PowerShell в установке.ps1.
вы должны быть в состоянии избежать запрос перезагрузки проекта если вы используете объектная модель Visual Studio (EnvDTE). Я бы взглянул на проект.ProjectItems.AddFromFile(... чтобы посмотреть, сработает ли это для вас.
MSBuild target
- NuGet поддерживает добавление инструкции import в проект, который указывает на MSBuild .реквизит и/или .целевой файл. Таким образом, вы могли бы поместить свои ресурсы в инструменты каталог вашего пакета NuGet и ссылаться на них из пользовательского MSBuild .реквизит./цели файл.
Как правило, обычай .реквизит и. цели используются для настройки процесса сборки. Однако это всего лишь файлы проекта MSBuild, поэтому вы можете добавлять элементы для своих ресурсов в эти файлы проекта.
обратите внимание, что .реквизит импортируется в начале файла проекта при установке пакета NuGet, в то время как .целевые показатели импортируются в конце проекта.
Настройка NuGet
другой вариант, который бы больше работы, было бы изменить NuGet для поддержки того, что вы хотите сделать.