【发布时间】:2014-08-19 01:12:56
【问题描述】:
简介(如何将资源打包到 nuget 包中)
要将一些资源文件打包到 nuget 包中,通常会执行以下操作。
将所有资源文件放到一个nuget包的content\目录下。这将由 .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脚本来破解 csproj 文件结构并手动添加必要的 XML 片段,
然而,这有以下缺点:
- 我所有的 nuget 包都需要在其
Install.ps1中使用相同的脚本, - 在安装我的包时,Visual Studio 中会出现令人讨厌的“项目重新加载提示”。
【问题讨论】: