Visual studio 在Visual studio解决方案中包含PSGallery nuget依赖项

Visual studio 在Visual studio解决方案中包含PSGallery nuget依赖项,visual-studio,powershell,nuget,nuget-package,Visual Studio,Powershell,Nuget,Nuget Package,问题 如何在多个解决方案中共享postbuild Powershell脚本,以便每个解决方案都可以在post build事件中调用该脚本 解决方案方法 创建本地 将我的脚本放入图库 在VS中,添加了新的PSGallary作为nuget源代码 将postbuild脚本作为解决方案中的nuget包拉入 现在我被卡住了。脚本保存在解决方案外部的nuget文件夹中,如下所示。 我不想硬编码脚本的路径,因为版本会改变,路径也会改变。如何在生成后事件中获取实际nuget包内容的路径而不进行硬编

问题

如何在多个解决方案中共享postbuild Powershell脚本,以便每个解决方案都可以在post build事件中调用该脚本

解决方案方法

  • 创建本地

  • 将我的脚本放入图库

  • 在VS中,添加了新的PSGallary作为nuget源代码

  • 将postbuild脚本作为解决方案中的nuget包拉入

现在我被卡住了。脚本保存在解决方案外部的nuget文件夹中,如下所示。


我不想硬编码脚本的路径,因为版本会改变,路径也会改变。如何在生成后事件中获取实际nuget包内容的路径而不进行硬编码?还有其他更好的方法吗?

您可以使用带有
OutputDirectory
参数的将包安装到项目目录中。之后,您可以在生成后事件中使用
$(ProjectDir)
宏。

您可以使用带有
OutputDirectory
参数的将包安装到项目目录中。之后,您可以在生成后事件中使用
$(ProjectDir)
宏。

不确定这是否是更好的方法,以下两个方向可能会有所帮助:

1.Nuget方式:在创建Nuget包时包含powershell脚本,然后在构建项目时,脚本将自动复制到输出路径。因此,您可以使用宏
$(OutputPath)
指定生成后事件。任何对此感兴趣的人都可以查看

对于使用PackageReference的
.net core
项目,请使用。关于如何使用
ContentFiles
element在线创建包含内容文件的包,有很多主题,因此我在这里不详细介绍,但如果您想选择这种方式并遇到一些问题,请告诉我:)

2.MSBuild-way:使用类似的方法自定义生成。由于您最初的问题是在多个解决方案中共享postbuild Powershell脚本,因此让我们将脚本
test.ps1
放在路径
C:\PostBuildScript\
中,创建一个包含以下内容的.txt文件,然后将其重命名为
目录.Build.props

<Project>
  <PropertyGroup>
    <ScriptPath>C:\xxx\xxx\</ScriptPath>
  </PropertyGroup>
</Project>

C:\xxx\xxx\
现在,如果我们将此文件放在Solution-A的目录中,那么解决方案中的所有项目都可以识别
$(ScriptPath)
,因此我们可以在构建事件中使用类似
$(ScriptPath)test.ps1
的参数。如果在生成事件中调用PS脚本时遇到代码9009,请参阅


如果这些解决方案位于文件夹
TestFolder
下,请将
目录.Build.props
文件放在该文件夹中,它将适用于该文件夹中的所有解决方案。此外,定制构建后事件的方法有很多,这取决于您的需要……

不确定这是否是一种更好的方法,以下两个方法可能会有所帮助:

1.Nuget方式:在创建Nuget包时包含powershell脚本,然后在构建项目时,脚本将自动复制到输出路径。因此,您可以使用宏
$(OutputPath)
指定生成后事件。任何对此感兴趣的人都可以查看

对于使用PackageReference的
.net core
项目,请使用。关于如何使用
ContentFiles
element在线创建包含内容文件的包,有很多主题,因此我在这里不详细介绍,但如果您想选择这种方式并遇到一些问题,请告诉我:)

2.MSBuild-way:使用类似的方法自定义生成。由于您最初的问题是在多个解决方案中共享postbuild Powershell脚本,因此让我们将脚本
test.ps1
放在路径
C:\PostBuildScript\
中,创建一个包含以下内容的.txt文件,然后将其重命名为
目录.Build.props

<Project>
  <PropertyGroup>
    <ScriptPath>C:\xxx\xxx\</ScriptPath>
  </PropertyGroup>
</Project>

C:\xxx\xxx\
现在,如果我们将此文件放在Solution-A的目录中,那么解决方案中的所有项目都可以识别
$(ScriptPath)
,因此我们可以在构建事件中使用类似
$(ScriptPath)test.ps1
的参数。如果在生成事件中调用PS脚本时遇到代码9009,请参阅


如果这些解决方案位于文件夹
TestFolder
下,请将
目录.Build.props
文件放在该文件夹中,它将适用于该文件夹中的所有解决方案。此外,有许多方法可以自定义生成后事件,这取决于您的需要…

这是一个选项。我试过了。看起来我无法通过VS>manage Nuget Packages>update或delete来管理/更新包。另外,如果我使用命令更新包,它将更改脚本的路径。这是一个选项。我试过了。看起来我无法通过VS>manage Nuget Packages>update或delete来管理/更新包。另外,如果我使用命令更新包,它将更改脚本的路径..我将尝试让您知道。。谢谢你,我跟在后面。它就像一个符咒。很高兴知道它有帮助。答案更新为您共享的博客链接:)我会尝试让您知道。。谢谢你,我跟在后面。它就像一个符咒。很高兴知道它有帮助。使用您共享的博客链接更新答案:)