MSBuild从PowerShell脚本调用时使用.sln,但从命令行调用时使用.csproj

本文关键字:调用 命令行 csproj sln PowerShell MSBuild 脚本 | 更新日期: 2023-09-27 18:07:21

我已经为这个问题挠头有一段时间了,似乎找不到任何东西。我正在尝试执行以下命令:

C: ' Windows ' Microsoft.NET ' Framework ' v3.5 ' MsBuild.exe D: '源文件' ' AppaloosaDotNet ' AppaloosaDotNet ' AppaloosaDotNet测试。csproj "/t:_CopyWebApplication;ResolveReferences;publish"/p:ReferencePath=D:'Builds'Testing'LatestBuild'/p:OutDir=''ServerName'D$'WebContent'AppaloosaDotNET'bin'/p:WebProjectOutputDir=''ServerName'D$'WebContent'AppaloosaDotNET'

如果我直接在PowerShell提示符中输入这个命令,它会正常工作。然而,我已经创建了一个PowerShell脚本,它为我做了这个调用,当脚本执行时,MSBuild向上移动一个文件夹,并使用解决方案文件(.sln)来构建项目。这将导致问题,因为在解决方案文件中没有找到目标。

如果我手动输入命令并执行它,MSBuild打印出它正在构建D:'SourceFiles'Testing'AppaloosaDotNET'AppaloosaDotNET'AppaloosaDotNET。

但如果我运行脚本MSBuild打印出来,它正在构建D:'SourceFiles'Testing'AppaloosaDotNET'AppaloosaDotNET。然后构建失败,因为没有找到目标。

我确信我在我的脚本中做错了什么,但不知道是什么。我已经仔细检查了脚本执行的命令是否与我输入的命令相同。我甚至复制了运行脚本时运行的命令,并粘贴在提示符下,它运行得很好,所以我很确定命令是相同的。什么好主意吗?

MSBuild从PowerShell脚本调用时使用.sln,但从命令行调用时使用.csproj

您的脚本是否可以位于与您的解决方案相同的路径?你是如何运行你的脚本和它驻留在哪里(如果它不是在相同的路径作为解决方案)?可能什么都没有,但我们先确认一下

只是一个更新。我开始有更多的问题与脚本,但终于找到了一个解决方案。我在脚本中使用字符串变量构建命令行。最初,脚本使用&操作符。最后我使用了Invoke-Expression命令,问题就解决了。