2

我在执行 powershell 脚本的 msbuild 配置中有一个后期构建步骤。如果我直接从 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 &quot;&amp; { &amp;'$(ScriptLocation)' } &quot;" />

我在 64 位机器上使用 VS2010。

谢谢!

4

2 回答 2

0

Visual Studio 2010 是一个 32 位进程。然后 Powershell 将作为 32 位进程运行。WebAdministration 模块只有 64 位。尝试使用%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exefor PowerShellExe

于 2013-08-21T15:27:10.093 回答
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:&quot;My Application Pool&quot;" IgnoreExitCode="true" />
<Exec Command="$(WinDir)\SysWOW64\inetsrv\appcmd.exe stop site /site.name:&quot;My Web Site&quot;" IgnoreExitCode="true" />
于 2020-08-18T21:21:10.773 回答