2010-08-25 49 views
13

Tengo un servidor de compilación CruiseControl .NET que se ejecuta en Windows Server 2003, y estoy tratando de compilar y publicar mi aplicación ClickOnce utilizando msbuild.Problema con clickonce bootstrapper y msbuild

Todo funciona bien, excepto cuando habilito el programa de arranque de mi aplicación ClickOnce. Cuando esto sucede, me sale el siguiente error en el objetivo 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'. 

.NET Framework 3.5 SP1 y 4 y último SDK de Windows para ambos están instalados en el servidor, pero la carpeta de programas previos en C: \ Program Files \ Microsoft SDKs \ Windows \ versionNo \ no existe. Intenté copiar los archivos de la máquina de mi estación de trabajo sin suerte.

No quiero instalar Visual Studio en el servidor y solo instalar los SDK necesarios.

También he intentado copiar la carpeta bootsrapper de mi máquina

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

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

para construir servidor, pero sin suerte.

¿Alguna idea?

+0

También he intentado copiar la carpeta bootsrapper de mi máquina C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper para compilar el servidor pero sin suerte. – nabeelfarid

+0

Esta solución funcionó para mí después de 4 horas de tratar de hacer que funcione: [Obtenga Visual Studio C# Express para bootstrapper/engine/setup.bin] (http://www.microsoft.com/express/Downloads/#2010-Visual -CS) – zproxy

+0

Funcionó para mí también. Gracias. – rob

Respuesta

15

También deberá agregar la clave y el valor asociados al registro para permitir que MSBuild encuentre la ruta a la carpeta Bootstrapper. Puedo confirmar que esto ha funcionado para mí usando el siguiente regedit.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\4.0] 
@="0" 
"Path"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bootstrapper\\" 

Actualización: Según TFS de Emma Blog parece que los siguientes valores del registro se comprueban con el fin de encontrar el camino programa previo y si no se encuentra miradas en su carpeta de proyecto local bajo la subcarpeta del motor y luego rescata con el error MSB3147 si no se encuentra allí.

  1. HKLM \ Software \ Microsoft \ GenericBootstrapper \ < .NET Herramientas de versión> \
  2. HKLM \ Software \ Microsoft.NetFramework \ SDKInstallRoot \ Bootstrapper
  3. HKLM \ Software \ Microsoft \ VisualStudio \\ InstallDir \ Bootstrapper

Recordatorio: Asimismo, recuerda que hay una de 32 bits y un registro de 64 bits así que asegúrese de agregar este valor al mismo registro que sus herramientas van a acceder.

Mientras tanto, también he creado un feature request para obtener una solución más razonable para este problema. Vota mi solicitud de funciones para que Microsoft la revise.

Por cierto, aquí hay algunos enlaces más sobre este tema:

+3

En un sistema de 64 bits, las claves de registro están en HKLM \ Software \ Wow6432Node \ Microsoft \ - ver http://netpl.blogspot.com.au/2011/02/msb3147-could-not-find-required-file- on.html –

6

También se puede pasar la ubicación de los paquetes Bootstrapper a la Publish objetivo común como esto:

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

y luego

<Target Name="Publish"> 
    <MSBuild Targets="publish" ... Properties="GenerateBootstrapperSdkPath=$(BootstrapperSdkPath); ..."/> 
</Target> 
+1

Después de pasar innumerables horas probando cualquier otra solución a este problema, esto funcionó y es muy sencillo. Gracias. –

3

I luchado con el mismo problema en mi máquina Win7 x64. No instalé Visual Studio y traté de crear y publicar una solución .NET 4.5 WPF. He tenido que añadir las siguientes claves al registro

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\11.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\4.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\" 

También es necesario copiar las carpetas de su máquina Bootstrapper prog. Este blog me dirigió en la dirección correcta http://www.wiktorzychla.com/2013/11/msb3147-could-not-find-required-file-on.html

2

Tuve un problema similar a esto, pero en mi caso tengo instalado Visual Studio en la caja y la publicación desde Visual Studio funciona bien. Al publicar desde la línea de comandos con msbuild.exe, la compilación falló con el error mencionado anteriormente "MSB3147 No se pudo encontrar el archivo requerido 'setup.bin'".

La solución fue especificar explícitamente qué versión de Visual Studio usar durante la compilación.

<MSBuild 
    Projects="MyProject.csproj" 
    Targets="publish" 
    Properties="Configuration=Release;PublishUrl=C:\AnyFolder;VisualStudioVersion=12.0"/> 

Tengo Visual Studio 2013 en una máquina Win7 x64. Mi lectura del problema es que MSBuild estaba buscando en el lugar equivocado en el registro. Al decirle explícitamente a MS Build que use VS 12.0, eligió la entrada de ubicación de registro correcta y, en consecuencia, la ruta correcta a BootstrapperSdkPath.

0

Experimenté este mismo error a través de mi servidor de compilación TeamCity. La causa en mi caso fue que estaba ejecutando una tarea de MSBuild contra mi archivo .sln, con un objetivo 'MyProject: publish'. En este caso, la solución + proyecto se había actualizado a destino .NET v4.5, pero el servidor de compilación aún estaba configurado para usar MSBuild Tools 4.0 y .NET v4.0.

Me llevó un poco de tiempo resolver la incoherencia entre las compilaciones de ramas que funcionan y las que no.

0

He añadido esta línea a la secuencia de comandos. Eso ayudo.

call "%VS120COMNTOOLS%vsvars32.bat" 

Visual Studio 2013, SDK v8.1A.

1

que era capaz de solucionar este problema señalando MSBuild.exe desde esta ubicación

C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ Bin \ MSBuild.exe

Anteriormente me estaba apuntando a

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe

1

Hola sé que esto responda a su taaaaaaaaaaaaaaaan finales pero solo en caso de

Tuve que agregar el Prop de ruta a la tarea, con la ruta donde está ubicado el programa de arranque, en mi caso utilicé Visual Studio 2015, por lo que la ruta es:

** Archivos de programa (x86) \ Microsoft Visual Studio 14.0 \ SDK \ Boostrapper **

MSBuild tiene una GenerateBootstrapper de tareas en mi caso

<GenerateBootstrapper> 
     AplicationFile="$(AppName)" 
     ApplicationName=.. 
     ApplicationUrl=.. 
     BootstrapperItems=.. 
     Culture=.. 
     ApplicationUrl=.. 
     Path="Program Files(x86)\Microsoft Visual Studio 14.0\SDK\Boostrapper\" 
    </GenerateBootstrapper> 

con esto la MSBuild es capaz de reconocer y generar el archivo

Ahora estoy stucked con el programa previo .NET 4, pero supongo que es otra historia ...

0

Sólo tuvieron problemas con este mismo - me eligió para cometer los archivos Bootstrapper a vitam e control. Es posible anular la ruta al programa de arranque, simplemente proporcione /p:GenerateBootstrapperSdkPath=.build\Bootstrapper

Luego no es necesario modificar el registro, y el beneficio adicional de que la compilación ahora es independiente.

El único "problema" es que tengo que copiar manualmente los archivos de Bootstrapper en el control de código fuente. En mi caso (VStudio2015), esto significó la copia de los archivos de C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

Cuestiones relacionadas