【问题标题】:How to tell nuget to add package resource files as links, and not copy them into project directory如何告诉nuget将包资源文件添加为链接,而不是将它们复制到项目目录中
【发布时间】: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 中会出现令人讨厌的“项目重新加载提示”。

【问题讨论】:

    标签: c# .net nuget


    【解决方案1】:

    由于 NuGet 目前不支持开箱即用,您可以选择使用 PowerShell 或使用自定义 MSBuild 目标。

    PowerShell

    • 将资源保留在 NuGet 包中的 Content 目录之外(如您已建议的那样)。
    • 在 install.ps1 中使用 PowerShell 添加文件链接。

    如果您使用 Visual Studio 对象模型 (EnvDTE),您应该能够避免 项目重新加载提示。我会看看 Project.ProjectItems.AddFromFile(...) 看看它是否适合你。

    MSBuild 目标

    • NuGet 支持将导入语句添加到指向 MSBuild .props 和/或 .targets 文件的项目中。因此,您可以将资源放入 NuGet 包的 tools 目录,并从自定义 MSBuild .props/.targets 文件中引用它们。

    通常自定义 .props 和 .targets 用于自定义构建过程。但是它们只是 MSBuild 项目文件,因此您可以将资源项添加到这些项目文件中。

    请注意,安装 NuGet 包时,在项目文件的开头导入 .props,而在项目结束时导入 .targets。

    自定义 NuGet

    另一个需要更多工作的选项是修改 NuGet 以支持您想要做的事情。

    【讨论】:

    猜你喜欢
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多