我在msbuild配置中有一个post build步骤,它执行一个powershell脚本。如果我直接从Powershell调用powershell脚本但是通过msbuild失败了,那么powershell脚本就可以正常工作。
它尝试使用导入中的类似乎失败了:
Import-Module WebAdministration
我收到错误“错误:由于以下错误,检索CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}组件的COM类工厂失败:80040154类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG) )“
我已经尝试将msbuild加载的powershell版本从64位更改为32位,但没有区别。
这是msbuild步骤:
<Target Name="DevPostBuild">
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe</PowerShellExe>
<ScriptLocation Condition=" '$(ScriptLocation)'=='' ">$(ProjectDir)DevPostBuild.ps1</ScriptLocation>
</PropertyGroup>
<Message Text="$(ScriptLocation)" />
<Exec Condition="Exists($(ScriptLocation))" Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command "& { &'$(ScriptLocation)' } "" />
我在64位机器上使用VS2010。
谢谢!
答案 0 :(得分:0)
Visual Studio 2010是一个32位进程。然后,Powershell将作为32位进程运行。 WebAdministration模块仅为64位。尝试将%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe
用于PowerShellExe
。
答案 1 :(得分:0)
与Visual Studio 2017中的相同,使用syswow64的powershell.exe没有区别。从MSBuild XML中控制IIS时,我遇到了类似的挑战,并且遇到有关未注册的小节的错误消息。 Stop-WebAppPool和Stop-Website因此在MSBuild XML中是无用的,因为它们全部来自WebAdministration模块,而没有提及IISAdministration模块中的Stop-IISSite。
就我而言,我必须利用IIS的旧的好AppCmd可执行文件。工作顺利,没有问题。我还遇到了应用程序池和网站已经停止的情况,所以请注意我会忽略任何错误代码。
<Exec Command="$(WinDir)\SysWOW64\inetsrv\appcmd.exe stop apppool /apppool.name:"My Application Pool"" IgnoreExitCode="true" />
<Exec Command="$(WinDir)\SysWOW64\inetsrv\appcmd.exe stop site /site.name:"My Web Site"" IgnoreExitCode="true" />