Проблема с загрузчиком clickonce и msbuild - PullRequest
13 голосов
/ 25 августа 2010

У меня есть сервер сборки CruiseControl .NET, работающий на Windows Server 2003, и я пытаюсь собрать и опубликовать свое приложение ClickOnce с помощью msbuild.

Все работает нормально, кроме случаев, когда я включаю загрузчик моегоПриложение ClickOnce.Когда это происходит, я получаю следующую ошибку в DeploymentGenerateBootstrapper target:

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 и 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

для создания сервера, но не повезло.

Есть идеи?

Ответы [ 9 ]

15 голосов
/ 25 января 2011

Вам также необходимо добавить связанный ключ и значение в реестр, чтобы MSBuild могла найти путь к папке Bootstrapper. Я могу подтвердить, что это сработало для меня, используя следующий regedit.

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

Обновление: Согласно блогу Эммы TFS кажется, что следующие значения реестра проверяются, чтобы найти путь к загрузчику, и, если он не найден, ищет в папке вашего локального проекта в подпапке Engine, а затем выдает ошибка MSB3147, если она там не найдена.

  1. HKLM \ Software \ Microsoft \ GenericBootstrapper \ <. NET Версия инструментов> \
  2. HKLM \ Software \ Microsoft.NetFramework \ SDKInstallRoot \ Bootstrapper
  3. HKLM \ Software \ Microsoft \ VisualStudio \\ InstallDir \ Bootstrapper

Напоминание: Также помните, что существует 32-разрядный и 64-разрядный реестры, поэтому обязательно добавьте это значение в тот же реестр, к которому будут обращаться ваши инструменты.

Тем временем я также создал запрос функции , чтобы получить более разумное решение этой проблемы. Пожалуйста, проголосуйте за мой запрос, чтобы заставить Microsoft взглянуть на него.

Кстати, вот еще несколько ссылок на эту проблему:

6 голосов
/ 07 ноября 2012

Вы также можете передать расположение пакетов начальной загрузки общей цели Publish следующим образом:

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

, а затем

<Target Name="Publish">
    <MSBuild Targets="publish" ... Properties="GenerateBootstrapperSdkPath=$(BootstrapperSdkPath); ..."/>
</Target>
3 голосов
/ 20 мая 2014

Я боролся с той же проблемой на моей машине win7 x64.Я не установил Visual Studio и попытался создать и опубликовать решение .NET 4.5 WPF.Мне пришлось добавить следующие ключи в реестр

[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\\"

Вам также необходимо скопировать папки Bootstrapper с вашего компьютера разработчика.Этот блог направил меня в правильном направлении http://www.wiktorzychla.com/2013/11/msb3147-could-not-find-required-file-on.html

2 голосов
/ 21 июля 2014

У меня была похожая проблема, но в моем случае у меня установлена ​​Visual Studio на коробке, и публикация из Visual Studio работает нормально. При публикации из командной строки с помощью msbuild.exe сборка не удалась с вышеупомянутой ошибкой «MSB3147 Не удалось найти требуемый файл« setup.bin »».

Решением было явное указание, какую версию Visual Studio использовать во время сборки.

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

У меня Visual Studio 2013 на компьютере с Win7 x64. Мое понимание проблемы состоит в том, что MSBuild искал не в том месте в реестре. Явно сказав MS Build использовать VS 12.0, он выбрал правильную запись в реестре и, следовательно, правильный путь к BootstrapperSdkPath.

1 голос
/ 07 сентября 2016

Привет, я знаю, что этот ответ оооочень поздно, но на всякий случай

Мне пришлось добавить в задачу Пропорку с Путьом, в котором находится загрузчик, в моем случае я использовал Visual Studio 2015 такпуть:

** Программные файлы (x86) \ Microsoft Visual Studio 14.0 \ SDK \ Boostrapper **

В моем случае в MSBuild есть задача GenerateBootstrapper

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

благодаря этому MSBuild может распознать и сгенерировать файл

Теперь я застрял с загрузчиком .net 4, но думаю, это другая история ...

1 голос
/ 27 августа 2016

Мне удалось решить эту проблему, указав MSBuild.exe из этого расположения

C: \ Program Files (x86) \ MSBuild \ 12.0 \ Bin \ MSBuild.exe

Ранее я указывал на

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

0 голосов
/ 21 сентября 2016

Просто боролся с этим сам - я решил передать файлы загрузчика в систему контроля версий.Можно переопределить путь к загрузчикам, просто предоставив /p:GenerateBootstrapperSdkPath=.build\Bootstrapper

Тогда нет необходимости изменять реестр - и дополнительное преимущество в том, что сборка теперь автономна.

Единственная «проблема» заключается в том, что мне приходится вручную копировать файлы Bootstrapper в систему контроля версий.В моем случае (VStudio2015) это означало копирование файлов из C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

0 голосов
/ 22 ноября 2014

Я добавил эту строку в скрипт.Помогла.

call "%VS120COMNTOOLS%vsvars32.bat"

Visual Studio 2013, SDK v8.1A.

0 голосов
/ 02 октября 2014

Я столкнулся с такой же ошибкой на моем сервере сборки TeamCity.Причиной в моем случае было то, что я запускал задачу MSBuild для моего файла .sln с целью «MyProject: publish».В этом случае решение + проект было обновлено до целевого .NET v4.5, но сервер сборки все еще был настроен для использования MSBuild Tools 4.0 и .NET v4.0.

Мне потребовалось немного времени, чтобы разобраться в несоответствии между работающими и нерабочими сборками веток.

...