Что решает целевая базовая версия спутниковой сборки? - PullRequest
9 голосов
/ 23 мая 2011

Что определяет целевую версию фреймворка сателлитной сборки?

Глядя на файл журнала, я вижу, что сателлитная сборка собирается с помощью ResGen.exe и Al.exe, но я не могу узнать, чторешает целевую структуру результирующей сборки.

Фон

Я пытаюсь решить проблему, когда спутниковая сборка становится целевой для среды выполнения .NET 4.0, когда ясоберите его на сервере сборки, но нацеливайтесь на время выполнения .NET 2.0, когда я собираю его на своем компьютере для разработки.Остальная часть решения предназначена для среды выполнения .NET 2.0, и исполняемый файл не будет загружать сателлитную сборку, если она предназначена для среды выполнения .NET 4.0.

Я попытался построить проект «вручную» с помощью msbuild насервер сборки, что также приводит к созданию спутниковой сборки, предназначенной для среды выполнения .NET 2.0.

Я получаю неверную целевую версию 4.0, только когда я собираюсь с использованием автоматического сервера сборки.

Ответы [ 4 ]

16 голосов
/ 10 июня 2011

Я просто потратил весь день, чтобы выследить это, но я думаю, что я решил это.Да, я мученик.Воспользуйтесь результатами неудачного приключения!

Я думаю, что установка Windows 7.1 SDK, похоже, содержит ошибку в отношении добавляемых ключей реестра.Некоторые из значений реестра указывают на 7.0a , когда оно должно указывать на 7.1 .Кроме того, некоторые разделы реестра имеют неправильные имена.

После некоторых ручных изменений мои библиотеки ресурсов вернулись к компиляции в соответствующую целевую версию платформы.Я почти уверен, что версия x64 будет не исправлена ​​с моими изменениями. Используйте на свой страх и риск!

Лично я не слишком доволен взломанным реестром для нашего сервера сборки.Кто знает, какие еще ужасы ждут меня во время выполнения моих сборок сервера.Я подумываю просто установить Visual Studio 2010.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools]
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools\1033]
"SP"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools-x86]
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools-x86\1033]
"SP"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="c:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\"
"MSBuildToolsRoot"="c:\\WINDOWS\\Microsoft.NET\\Framework\\"
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1@InstallationFolder)"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx35Tools-x86@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
1 голос
/ 08 июня 2011

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

Ранее команда построения на моем сервере сборки была просто "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe"

Я создал командный файл, содержащий две строки:

@call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\setenv.cmd"
@C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe %* 

и настроил сервер для использования этого пакетного файла в качестве команды построения.

Моим сервером сборки был Jenkins, а не TFS, но я надеюсь, что это также решит вашу проблему.

0 голосов
/ 12 августа 2013

В дополнение к ответу Джонни Кауфмана у меня была проблема с тем, что у меня был подключ в HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 с именем 11.0. В этом ключе были ссылки на HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A, которого нет на моей машине. Поэтому, если ответ Джонни Кауфмана не поможет, проверьте ключ 11.0 и рассмотрите возможность его удаления.

0 голосов
/ 23 мая 2011

Как автоматическая сборка настраивает командную среду, в которой выполняется MSBuild?Если вы сможете понять это и увидеть, как это отличается от того, как вы настраивали командную среду, когда вы «вручную» выполнили успешную сборку на той же машине, вы, вероятно, найдете ответ.Если вы не можете найти эти подсказки, установите сборку в журнал с диагностикой (/ fl /flp:v=diag;logfile=build-diag.log) и сравните журнал автоматической и ручной сборки.

...