使用gacutil和installutil部署powershell管理单元时的构建后错误

时间:2014-07-31 21:56:59

标签: powershell visual-studio-2013 post-build-event gacutil installutil

我正在尝试学习使用VS 2013为powershell 4.0编写snapin。脚本非常简单并且编译时没有错误。但是,当我使用post-built添加gacutil和installutil来部署snapin时,我收到了这个错误:

Error   1   
The command ""C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "Tools.Powershell.Printscreen.dll"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "Tools.Powershell.Printscreen.dll"" exited with code -1.

但是,如果我复制命令并从命令提示符运行它,则两个命令都会成功运行并且安装已成功部署。然后我可以将snapin添加到powershell,snapin也成功运行。

我检查过,使用的框架是正确的4.5.1,VS 2013,系统是Windows 8.1

构建后的命令是:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "$(TargetPath)"

我认为此时snapin的代码无关紧要,但如果你想让我加入,请告诉我。我不相信它会影响解决方案bc它最简单,并且在我使用命令提示符手动部署之后它起作用了。

请告知。

谢谢!

1 个答案:

答案 0 :(得分:2)

为什么要构建一个管理单元,除非您需要定位V1,如果您正在编译.NET 4.5.1,则无法定位。我建议使用module。无需注册/安装。您只需将模块xcopy到目标系统($ home \ Documents \ WindowsPowerShell \ Modules)并使用它。我建议您为模块创建一个PSD1清单文件。 RootModule将是您的dll的名称:Tools.Powershell.Printscreen.dll。查看New-ModuleManifest命令以获取有关创建PSD1文件的帮助。它是作者名称,版本,GUID等基本内容,用于唯一标识模块等。我还建议您在CmdletsToExport字段中列出导出的cmdlet。这将加快自动模块加载的处理速度。

为了测试目的,您可以直接导入dll(无需创建PSD1文件):

Import-Module -assembly c:\temp\Tools.Powershell.Printscreen.dll