Проблема с загрузчиком clickonce и msbuild
У меня есть сервер сборки CruiseControl.NET, работающий на Windows Server 2003, и я пытаюсь создать и опубликовать приложение ClickOnce с помощью msbuild.
Все работает нормально, за исключением случаев, когда я включаю bootstrapper моего приложения 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'.
.NET Framework 3.5 с пакетом обновления 1 и 4 и последний пакет Windows SDK для обоих установлены на сервере, но папка bootstrapper в C:\Program Files\Microsoft SDK\Windows\versionNo\не существует. Я попытался скопировать файлы с моей рабочей станции без везения.
Я не хочу устанавливать Visual Studio на сервер и устанавливать только необходимые SDK.
Я также попытался скопировать папку bootsrapper с моей машины
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper
чтобы создать сервер, но не повезло.
Любые идеи?
Ответы
Ответ 1
Вам также необходимо добавить связанный ключ и значение в реестр, чтобы позволить MSBuild найти путь к папке Bootstrapper. Я могу подтвердить, что это сработало для меня, используя следующий regedit.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\4.0]
@="0"
"Path"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bootstrapper\\"
Обновление: В соответствии с блоком Emma TFS он показывает, что для проверки пути начальной загрузки проверяются следующие значения реестра, и если они не найдены в вашей локальной папке проекта в подкаталоге Engine, а затем подзаголовок с ошибкой MSB3147, если она не найдена.
- HKLM\Software\Microsoft\GenericBootstrapper\<.NET Tools Version > \
- HKLM\Software\Microsoft.NetFramework\SDKInstallRoot\Bootstrapper
- HKLM\Software\Microsoft\VisualStudio\\InstallDir\Bootstrapper
Напоминание: Также помните, что есть 32-разрядный и 64-разрядный реестр, поэтому обязательно добавьте это значение в тот же реестр, к которому будут обращаться ваши инструменты.
Тем временем я также создал запрос функции, чтобы получить более разумное решение этой проблемы. Просьба проголосовать за мой запрос, чтобы Microsoft взглянула на него.
Кстати, вот еще несколько ссылок по этой проблеме:
Ответ 2
Вы также можете передать местоположение пакетов bootstrapper в общую цель 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
Я боролся с той же проблемой на моей машине 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 с вашей машины dev. Эта blogpost направила меня в правильном направлении http://www.wiktorzychla.com/2013/11/msb3147-could-not-find-required-file-on.html
Ответ 4
У меня была аналогичная проблема, но в моем случае у меня есть 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.
Ответ 5
Я смог исправить эту проблему, указав на MSBuild.exe из этого местоположения
C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe
Раньше я указывал на
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Ответ 6
Привет, я знаю, что этот ответ о нем так поздно, но на всякий случай
Мне пришлось добавить ссылку "Путь" к задаче с помощью Пути, где находится загрузочный блок, в моем случае я использовал Visual Studio 2015, так что путь:
** Программные файлы (x86)\Microsoft Visual Studio 14.0\SDK\Boostrapper **
MSBuild имеет Task GenerateBootstrapper в моем случае
<GenerateBootstrapper>
AplicationFile="$(AppName)"
ApplicationName=..
ApplicationUrl=..
BootstrapperItems=..
Culture=..
ApplicationUrl=..
Path="Program Files(x86)\Microsoft Visual Studio 14.0\SDK\Boostrapper\"
</GenerateBootstrapper>
с этим MSBuild может распознавать и генерировать файл
Теперь я привязан к загрузочному блоку .net 4, но думаю, это еще одна история...
Ответ 7
Я столкнулся с такой же ошибкой на моем сервере сборки TeamCity. Причиной в моем случае было то, что я запускал задачу MSBuild против моего .sln файла с целью "MyProject: publish". В этом случае решение + projecth было обновлено до версии .NET v4.5, но сервер сборки по-прежнему настроен на использование MSBuild Tools 4.0 и .NET версии 4.0.
Мне потребовалось немного времени, чтобы разобраться в несогласованности между рабочими и нерабочими ветвями.
Ответ 8
Я добавил эту строку в script. Это помогло.
call "%VS120COMNTOOLS%vsvars32.bat"
Visual Studio 2013, SDK v8.1A.
Ответ 9
Просто с этим справился - я решил передать файлы bootstrapper в исходный элемент управления. Можно переопределить путь к загрузчикам, просто укажите /p:GenerateBootstrapperSdkPath=.build\Bootstrapper
Тогда нет необходимости изменять реестр - и добавленное преимущество, которое теперь самоподдерживается.
Только "проблема" заключается в том, что мне приходится вручную копировать файлы Bootstrapper в исходный элемент управления. В моем случае (VStudio2015) это означало копирование файлов из C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper