要将一些资源文件打包到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\
目录下)。
我的目标不是在AnotherProject
目录中拥有资源文件的物理副本,而是使用&#34;链接&#34;到packages\
目录下的原始资源。在csproj中,这应该是这样的:
<Content Include="packages\Project.1.0.0\content\js\script.js">
<Link>js\script.js</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
现在,一个人做了很多事情&#34;我能想到的解决方法是:
content\
下,因此不会自动添加,Install.ps1
脚本,该脚本会破解csproj文件结构并手动添加必要的XML部分,然而,这有以下缺点:
Install.ps1
,答案 0 :(得分:3)
由于NuGet目前不支持开箱即用,因此您可以选择使用PowerShell或使用自定义MSBuild目标。
<强>的PowerShell 强>
如果使用Visual Studio对象模型(EnvDTE),则应该能够避免项目重新加载提示。我会看看Project.ProjectItems.AddFromFile(...),看看它是否适合你。
MSBuild目标
通常,自定义.props和.targets用于自定义构建过程。但它们只是MSBuild项目文件,因此您可以将资源项添加到这些项目文件中。
请注意,安装NuGet包时会在项目文件的开头导入.props,同时在项目结束时导入.targets。
自定义NuGet
另一个需要做更多工作的选择是修改NuGet以支持你想要做的事情。