Вступление (как упаковать ресурсы в пакет nuget)
Чтобы упаковать некоторые файлы ресурсов в пакет nuget, то, что обычно будет делать, следующее.
Поместите все файлы ресурсов в каталог content\ пакета nuget. Это будет указано следующей строкой в файле .nuspec:
<files>
<file src="Project\bin\Release\script.js" target="content\js\script.js" />
<files>
Теперь, когда этот пакет nuget устанавливается в AnotherProject, появляется следующая файловая структура:
Solution.sln
packages\Project.1.0.0\content\js\script.js // the original resource file
AnotherProject\js\script.js // a physical copy
AnotherProject\AnotherProject.csproj // <Content /> tag (see below)
Во время установки пакета AnotherProject.csproj был добавлен тег:
<Content Include="js\script.js" />
и это для физической копии исходного ресурса (который находится в каталоге packages\).
Актуальная проблема (как упаковать ресурсы в пакет nuget как ссылку)
Моя цель - не иметь физическую копию файла ресурсов в каталоге AnotherProject, а скорее "ссылку" на исходный ресурс в каталоге packages\. В csproj это должно выглядеть так:
<Content Include="packages\Project.1.0.0\content\js\script.js">
<Link>js\script.js</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Решение грубой силы, которое я предпочел бы избежать
Теперь, обходное решение "сделай это трудным путем", о котором я могу думать:
- не помещать файлы ресурсов в
content\, чтобы они не добавлялись автоматически, - запись
Install.ps1script, которая взломает структуру файла csproj и добавит необходимую часть XML вручную,
Это, однако, имеет следующие недостатки:
- всем моим пакетам nuget нужна те же script часть в
Install.ps1, - при установке моих пакетов в Visual Studio будет неприятная "перезагрузка проекта".