2013-04-03 3 views
1

У меня есть решение VS2010, которое создает несколько сборок для .NET 2.0.MSBuild создает спутниковые сборки для неправильной версии фрейма

Это также включает в себя спутниковые сборки.

Когда я создаю все с VS2010, все в порядке. Но у меня есть компьютер XP, работающий как сервер сборки с использованием MSBuild. Созданные там спутниковые сборки не распознаются. Глядя на ILDASM, я вижу, что VS2010 создает метаданные версии 2, в то время как MSBuild создает версию 4. Я предполагаю, что это означает, что VS2010 создает правильные версии .NET2, в то время как MSBuild создает только основные сборки для .NET2, но спутниковые сборки - .NET4.

Я уже знаю об этой теме здесь: What decides the target framework version of a satellite assembly?

Но это не работает для меня.

Любые идеи, как я могу заставить сервер сборки создавать спутниковые сборки .NET2? Я мог бы улучшить мой скрипт, если знаю, как правильно вызвать AL.exe.

+1

Пробовал [это] (http://stackoverflow.com/a/2419961/147211)? – KMoraz

+0

Настройка версии инструмента с помощью переключателя '/ tv: 2.0' не помогает, потому что тогда он использует старый компилятор C#, а не компилятор vs2010 C# 4.0. Настройка целевой структуры не помогает. Поскольку вывод показывает, что вызов AL.exe, который генерирует спутниковые сборки, выполняется таким же образом, и ILDASM по-прежнему показывает сборки .NET4-satellite. – ZoolWay

ответ

2

Хорошо, я взломал его.

У машины для сборки (WinXP) есть Windows SDK 7.1 с AL.exe 10.0.30.x. Это тот, который всегда создает сборки .NET4-satellite.

Моя машина (Win7) с VS2010 имеет Windows SDK 7.0a с AL.exe 9.0.30729.1. Это тот, который соответствует целевой структуре.

У меня есть (после резервного копирования) заменить AL.exe с машины сборки на мою. Это работает, но я считаю это очень грязным обходным решением.

Если кто-нибудь знает лучший способ, я был бы признателен за любую помощь!

Смежные вопросы