要将一些资源文件打包到nuget包中,通常会执行以下操作.
将所有资源文件放入content\
nuget包的目录中.这将由.nuspec
文件中的以下行指定:
<files>
<file src="Project\bin\Release\script.js" target="content\js\script.js" />
<files>
Run Code Online (Sandbox Code Playgroud)
现在,当安装此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)
Run Code Online (Sandbox Code Playgroud)
在软件包安装过程中,AnotherProject.csproj
注入了标签:
<Content Include="js\script.js" />
Run Code Online (Sandbox Code Playgroud)
这是原始资源的物理副本(位于packages\
目录下).
我的目标不是在AnotherProject
目录中拥有资源文件的物理副本,而是在packages\
目录下拥有原始资源的"链接" .在csproj中,这应该是这样的:
<Content Include="packages\Project.1.0.0\content\js\script.js">
<Link>js\script.js</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Run Code Online (Sandbox Code Playgroud)
现在,我能想到的一个"难以实现"的解决方法是:
content\
所以它们不会自动添加,Install.ps1
破解csproj文件结构的脚本并手动添加必要的XML片段,然而,这具有以下缺点:
Install.ps1
,由于 NuGet 目前不支持开箱即用,您可以选择使用 PowerShell 或使用自定义 MSBuild 目标。
电源外壳
如果您使用 Visual Studio 对象模型 (EnvDTE),您应该能够避免项目重新加载提示。我会看一下 Project.ProjectItems.AddFromFile(...) 看看这是否适合您。
MSBuild 目标
通常,自定义 .props 和 .targets 用于自定义构建过程。但是,它们只是 MSBuild 项目文件,因此您可以将资源项添加到这些项目文件中。
请注意,安装 NuGet 包时,.props 将在项目文件的开头导入,而 .targets 将在项目末尾导入。
自定义 NuGet
另一种选择(需要更多工作)是修改 NuGet 以支持您想要执行的操作。
归档时间: |
|
查看次数: |
5986 次 |
最近记录: |