Сборка проекта с помощью MSBUILD создает новейшие, не указанные проекты (.NET 4) - PullRequest
1 голос
/ 23 июля 2010

У меня есть решение, которое я переношу с Visual Studio 2005 на 2010. Внутри IDE на машинах разработчиков все работает нормально, но мой сервер сборки (с CC.NET) выдает ошибку.

У меня около 10 проектов, 3 из которых не имеют строгого имени из-за использования неподписанных ссылок.

Один из них (подписанный) имеет InternalsVisible для другого из подписанных проектов.

В IDEЯ использую конфигурацию Debug / Release, которая задерживает подпись всех проектов со строгим именем.

Я также создал конфигурации Debug_Signed и Debug_Unsigned (и соответствующий Release_ *), которые только строят соответствующие проекты.

На моем сервере сборки я использую фактический закрытый ключ, чтобы сначала создать конфигурацию Debug_Signed, а затем снова вызвать MSBUILD для конфигурации Debug_Unsigned с SingAssembly = false.

Это прекрасно работало при использовании.NET 2.0 SDK, но теперь первый MSBUILD работает нормально, но затем второй MSBUILD пытается ребуйld подписанные проекты (так как на них ссылаются неподписанные проекты), и я получаю ошибку об одной сборке, имеющей InternalsVisible для подписанной сборки, в то время как сгенерированная сборка не подписана:

ошибка CS0281: Friendбыл предоставлен доступ к 'Sic.Gateway.Customers, PublicKey = 0024 ... 4bbe', но выходная сборка называется 'Sic.Gateway.Customers, версия = 2.0.0.796, культура = нейтральная, PublicKeyToken = null'.Попробуйте добавить ссылку на 'Sic.Gateway.Customers, PublicKey = 0024 ... 4bbe' или измените имя выходной сборки для соответствия.

Мне хотелось бы, чтобы второй MSBUILD использовал ссылкусборки, которые были только что собраны первым MSBUILD вместо того, чтобы пытаться перестроить их.

Сервер сборки просто имеет среду выполнения .NET 4.0 (не SDK), и мне пришлось скопировать два файла .targets (для SQL /CLR и веб-приложения).Но так как все кажется нормально, я не думаю, что это будет проблемой.

Кто-нибудь знает, что я могу сделать?

Спасибо,

Луис Алонсо Рамос

1 Ответ

1 голос
/ 21 июня 2011

(скопировано как ответ из комментария Луиса выше)

При запуске MSBUILD для неподписанных или подписанных сборок я указывал три свойства:

SignAssembly=true\false;DelaySign=False;AssemblyOriginatorKeyFile=D:\blah\blah.s‌​nk 

Дело в том, что эти свойства применяютсяко всему решению, переопределяя настройки из отдельных проектов.Я только указал свойства DelaySign и файла ключа без указания SignAssembly .Таким образом, сборки, которые должны быть подписаны, все еще подписаны (с новыми настройками без подписи с задержкой), а те, которые не должны быть подписаны, не являются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...