Insert导入项目文件的位置0,并使用Nuget install.ps1进行保存而没有提示

问题描述 投票:0回答:1

我正在构建一个Nuget软件包,其中包含一个带有install.ps1的工具文件夹。此Nuget软件包依赖于NugetPowerTools软件包,该软件包提供了一些与项目及其属性一起使用的API。我已经在下面的install.ps1中粘贴了使用的代码。

param($installPath, $toolsPath, $package, $project)
$buildProject = Get-MSBuildProject
$import = $buildProject.Xml.AddImport("Custom.Targets")
$buildProject.Save()

我有2个问题。

  1. AddImport在末尾附加目标(即,在其他Import行之后)。我需要将导入作为第一行(因为此目标文件中具有某些功能,需要先执行某些功能)。是否可以首先插入导入(即我的Custom.Targets导入应该是项目文件中导入的第一项)?我找不到插入方法。

  2. 一旦此install.ps1修改了项目文件,Visual Studio中就会弹出/提示符,其中有4个选项,即SaveAs,Discard,Overwrite和Ignore。我想在没有此提示的情况下保存并覆盖项目文件/从install.ps1中弹出。这是为了避免用户的任何意外错误。为了克服这个问题,我在下面找到了一个链接,该链接包含以下代码行,可以帮助我克服此问题。

How can I reload a visual studio project thru a nuget powershell script

$(get-item $project.FullName).lastwritetime=get-date

但是现在,我又弹出了一个提示,提示您重新加载,全部重新加载,忽略,全部忽略。没有此提示,是否有办法重新加载该项目?

请帮助。

注意:如果有人可以在没有NugetPowerTools的情况下提供正确的语法,也可以不使用NugetPowerTools。

nuget install visual-studio-2019 project-files
1个回答
0
投票

是否可以首先插入导入(即,我的导入带有Custom.Targets应该是项目中Import的第一项文件)?我找不到插入方法。

由于要让Custom.Targets成为xxx.proj文件中的第一个导入项目,因此可以将其与Powershell分开,然后使用Custom Build Targets or Props实现。实际上,我与powershell脚本并不相似,因此我推荐这个自NuGet 2.5。]之后发布的简单函数。

[Note

此功能应使用nuget.exenuspec file打包您的项目。

步骤1)

在项目的根目录中的一个名为build的新文件夹中创建一个文件,然后将<package_id>.props文件放入其中。此外,最好添加一个与框架相关的适当子文件夹。像这样:

\build
    \netstandard2.0
        \<package_id>.props

Attention

:请从文档中查看:

。props添加在项目文件的顶部; .targets添加在底部。

.targets.props文件具有相同的性质,但是在这种nuget机制下,.props文件位于xxx.proj文件的顶部。此外,文件名应与nuspec文件中定义的package_id相同。

所以您应该将Custom.Targets更改为<package_id>.pros

步骤2)

然后在.nuspec文件中,请确保在节点中引用这些文件:

<?xml version="1.0"?>
<package >
    <metadata minClientVersion="2.5">
    <!-- ... -->
    </metadata>
    <files>
        <!-- Include everything in \build -->
        <file src="build\**" target="build" />

        <!-- Other files -->
        <!-- ... -->
    </files>
</package>

步骤3)

最后,使用nuget.exe

打包您的项目。

另外

,请确保在使用自定义道具时定义了您使用的属性,项目或目标,以防您使用Microsoft.Common.propsMicrosoft.CSharp.targets中定义的一些常用属性,找不到并报告错误,因为这些文件是在您的自定义道具后导入的。

这是我测试过的结果:

enter image description here

但是现在,我又弹出了一个提示,提示了重新加载,重新加载全部,忽略,全部忽略。有没有一种方法可以重新加载该项目而无需这个提示?

我认为这种行为是由VS本身而不是powershell控制的。 VS将检测这些文件的状态并弹出提示。因此,这是由VS SDK控制的。或者我想您可以参考this document通过VS SDK接口覆盖VS的行为。

希望它可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.