【问题标题】:Nesting files in Nuget package without PowerShell在没有 PowerShell 的 Nuget 包中嵌套文件
【发布时间】:2017-09-29 10:56:12
【问题描述】:

标题说明了一切。我有一些文件要在安装 NuGet 包的过程中嵌套,但不能使用 PowerShell 脚本,因为它们将不再运行(see here)

还有其他方法可以实现这个目标吗?


更新: 嵌套是指*.resx*.Designer.cs*.xaml 和代码隐藏文件*.xaml.cs。我知道我可以通过在 *.csproj 文件中添加 <DependentUpon> 元素来实现这一点,但我不知道如何在不使用 PowerShell 的情况下添加该元素。


UPDATE2: init.ps1 runs the first time a package is installed in a solution。但这不会削减它。当包安装到项目中时,我需要运行脚本,就像 install.ps1 运行到 NuGet3。


UPDATE3:我要做的是将3个文件添加到目标项目的Properties文件夹中(Resources.resxResources.ttResources.Designer.cs)。它们是通常资源实施的替代品。这些文件由 nuget 包在添加到项目时安装。

这是*.nuspec 文件的一部分,将它们添加到包的Content 文件夹中。由于其中只有一个实际上是内容(其他分别是嵌入式资源和编译),因此能够相应地设置它们的构建操作,但一次一步。

<files>
  <file src="Properties\Resources.resx" target="content\Properties\Resources.resx" />
  <file src="Properties\Resources.tt.pp" target="content\Properties\Resources.tt.pp" />
  <file src="Properties\Resources.Designer.cs" target="content\Properties\Resources.Designer.cs" />
</files>

由于这些文件被添加到项目中,我希望嵌套在 *.csproj 文件中,并且如果可能的话,不要通过单独的 *.props 文件发生。

【问题讨论】:

  • “嵌套文件”是什么意思?在你的 nupkg 中创建一个树结构?
  • @MartinUllrich 请看我的更新
  • Powershell script support was modified to no longer execute install and uninstall scripts, but init scripts are still executed 一些 脚本将不再运行...但其他脚本会!
  • @gvee Init.ps1 runs the first time a package is installed in a solution。但这不会削减它。当包安装到项目中时,我需要运行脚本。
  • 您是否真的需要一个脚本来布置文件,或者只是预先布置您的 nuget 内容以便将其按原样安装在正确的目录中?我们使用带有 &lt;itemgroup&gt;&lt;file include=...&gt;&lt;targetpath&gt;TopDir\NesteDir\...&lt;/targetpath&gt;... 的 .nuproj 条目

标签: powershell nuget nuget-package


【解决方案1】:

包可以使用包中的 .props 文件将这样的 MSBuild 项添加到项目中。它包含的内容与您放入 .csproj 文件中的内容相同。

这样做的缺点是用户无法修改内容。如果您需要修改用户的实际项目文件并将内容复制到项目文件夹,则必须在包中包含一个 .targets 文件并在目标上设置 BeforeTargets="Build"。这将使您有机会在构建之前运行并根据需要进行更改。

构建文件夹适用于 packages.config 和 PackageReference (NETCore SDK) 项目。你可以在这里找到更多信息:https://docs.microsoft.com/en-us/nuget/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package

【讨论】:

  • *.props 文件不是解决方案,因为至少有一个已安装文件需要可编辑。 *.targetsfile 并没有真正的帮助,因为它唯一能做的就是调用 powershell 脚本,这是我想尽可能避免的事情。我相应地更新了我的问题。
  • props/targets 文件让您有机会执行自己的脚本并进行所需的更改。NuGet 不提供将内容复制到项目或在安装时运行脚本的内置方式/卸载,因为 PackageReference 项目不存在该概念,其中依赖关系图是为每个还原独立计算的。
  • 说实话,这不是 100%。我想摆脱 PowerShell 而不是从自定义目标调用 PowerShell。但它完成了工作,让赏金再次浪费将是一种耻辱。
猜你喜欢
  • 2020-05-02
  • 2020-09-11
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多