Вступление (как упаковать ресурсы в пакет 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.ps1
script, которая взломает структуру файла csproj и добавит необходимую часть XML вручную,
Это, однако, имеет следующие недостатки:
- всем моим пакетам nuget нужна те же script часть в
Install.ps1
, - при установке моих пакетов в Visual Studio будет неприятная "перезагрузка проекта".