我正在尝试通过 Hudson CI 构建 Visual Studio Package 项目。这是一个 Visual Studio 2010 项目。该项目在我的开发箱中构建得很好,但由于某种原因,仅在 Hudson 中构建时我才不断收到以下错误:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio 10.0\VSSDK\Microsoft.VsSDK.targets(378,5):错误:尝试读取 VSIX 清单文件“obj\Release xtension.vsixmanifest”时出错。该系统找不到指定的文件。 (HRESULT 异常:0x80070002)[C:\hudson\workspace\MyProject_Daily_Compilation\Source\MyProject.VisualStudio\MyProject.VisualStudio.csproj]
我已验证该文件存在于磁盘上的以下位置:
C:\Hudson\workspace\MyProject_Daily_Compilation\Source\MyProject.VisualStudio\obj\Release xtension.vsixmanifest
什么可能导致此问题?
如果您运行构建的用户没有管理权限,您可能会遇到此类错误。
所以有2个解决方案:
1) 使用管理权限运行您的构建(构建服务器)。
或者如果您无法真正更改构建服务器运行的用户
2) 并且您实际上不需要在构建服务器本身上部署 VS 扩展,请将 *.csproj 文件中的 DeployExtension 属性设置为 false。
Microsoft.VsSDK.targets 默认情况下将该属性设置为 true
<DeployExtension Condition="'$(DeployExtension)' == ''">true</DeployExtension>
但是如果您不需要在本地部署该扩展(而是更愿意构建 *.vsix 捆绑包,您可以安全地放置
<PropertyGroup>
<DeployExtension>false</DeployExtension>
</PropertyGroup>
最初的错误基本上是因为尝试获取部署路径在构建过程中的某个时刻失败并破坏了成功的 vsix 包生成而发生的。通过将该属性设置为 false,构建不会尝试在本地部署扩展(但会生成有效的 *.vsix)
我猜你正在将 hudson 作为服务运行。 如果是这样,“0x80070002 - 系统找不到指定文件”很可能是由于用于运行 hudson 的用户没有访问权限。
对此问题的快速解决方案是将 Hudson 服务的“登录”用户更改为您的普通帐户。