clickonce bootstrapper和msbuild的问题

nab*_*rid 13 msbuild clickonce winapi

我有一个在Windows Server 2003上运行的CruiseControl .NET构建服务器,我正在尝试使用msbuild构建和发布我的ClickOnce应用程序.

除非我启用ClickOnce应用程序的引导程序,否则一切正常.发生这种情况时,我在DeploymentGenerateBootstrapper目标中收到以下错误:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (3939,9):

error MSB3147: 

Could not find required file 'setup.bin' in 'E:\Projects\src\TestProject\Engine'.
Run Code Online (Sandbox Code Playgroud)

.NET Framework 3.5 SP1和4以及最新的Windows SDK都安装在服务器上,但C:\ Program Files\Microsoft SDKs\Windows\versionNo \中的引导程序文件夹不存在.我试着从我的工作站机器上复制文件而没有运气.

我不想在服务器上安装Visual Studio,只安装必要的SDK.

我也尝试从我的机​​器上复制bootsrapper文件夹

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper
Run Code Online (Sandbox Code Playgroud)

建立服务器,但没有运气.

有任何想法吗?

jpi*_*son 15

您还必须将关联的键和值添加到注册表,以允许MSBuild查找Bootstrapper文件夹的路径.我可以使用以下注册表确认这对我有用.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\4.0]
@="0"
"Path"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bootstrapper\\"
Run Code Online (Sandbox Code Playgroud)

更新:根据Emma的TFS博客,似乎检查以下注册表值以查找引导程序路径,如果未找到,则在Engine子文件夹下的本地项目文件夹中查找,如果在那里找不到则返回MSB3147错误.

  1. HKLM\Software\Microsoft\GenericBootstrapper\<.NET Tools版本> \
  2. HKLM\Software\Microsoft.NetFramework\SDKInstallRoot\Bootstrapper
  3. HKLM\Software\Microsoft\VisualStudio \\ InstallDir\Bootstrapper

提醒:还要记住有32位和64位注册表,因此请务必将此值添加到工具将访问的同一注册表中.

与此同时,我还创建了一个功能请求,以便为此问题获得更合理的解决方案.请对我的功能请求进行投票,以便微软查看它.

顺便说一下,这里有一些关于这个问题的链接:

  • 在64位系统上,注册表项位于HKLM\Software\Wow6432Node\Microsoft \下 - 请参阅http://netpl.blogspot.com.au/2011/02/msb3147-could-not-find-required-file-on html的 (3认同)

jua*_*gui 6

您还可以将引导程序包的位置传递给公共Publish目标,如下所示:

<PropertyGroup>
     <BootstrapperSdkPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper</BootstrapperSdkPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

然后

<Target Name="Publish">
    <MSBuild Targets="publish" ... Properties="GenerateBootstrapperSdkPath=$(BootstrapperSdkPath); ..."/>
</Target>
Run Code Online (Sandbox Code Playgroud)