2012-01-31 1 views
7

Скажем, у меня есть два проекта: P4 и P3, предназначенные для .net 4.0 и 3.5 соответственно.Может ли мое приложение .Net ссылаться на две разные версии библиотеки .net framework?

В каждом проекте также содержится ссылка на System.Data. В случае P4, он будет System.Data v4.0.0.0 В случае P3, это будет System.Data v2.0.0.0

P4 Проект также ссылается на P3.

Если P4 загружен и выполнен, он использует CLS. NET 4.0. Во время выполнения ссылки на System.Data, похоже, разрешают v4.0 внутри P4 и P3. Я могу переопределить это, используя переадресацию assemblyBinding, но тогда и P4, и P3 разрешат v2.0.

Есть ли способ настроить мое приложение так, чтобы P4 использовал v4.0, а P3 - v2.0?

ответ

3

Если у вас есть контроль над P3, да. Перейдите в раздел ссылок проекта, найдите ссылку System.Data и просмотрите окно свойств (щелкните правой кнопкой мыши -> Свойства).

Выберите «Истина» для свойства «Специфическая версия». Перекомпилируйте, передислоцируйте и т. Д.

Обратите внимание, что при сбое сборки сборка будет возникать всякие сбои во время выполнения, если .NET 2, 3 или 3.5 не установлены.

Редактировать

Я попытался это, но не повезло. P3 все еще работает v4.0. Вы знаете, будет ли этот параметр иметь какой-либо видимый эффект в сборке, сгенерированной для P3? Например. В манифесте говорится: «.ver 2: 0: 0: 0» ли значение «Специфическая версия» равно true или нет.

Попробуйте добавить это к вашему app.config:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

Я пробовал это, но не повезло. P3 все еще работает v4.0. Вы знаете, будет ли этот параметр иметь какой-либо видимый эффект в сборке, сгенерированной для P3? Например. В манифесте говорится: «.ver 2: 0: 0: 0» ли значение «Специфическая версия» равно true или нет. – Rob

+1

Да, это то, что я сделал после совета Себа. Мне также необходимо указать useLegacyV2RuntimeActivationPolicy = "true" как атрибут в теге автозагрузки. В противном случае он разбился с Unhandled Exception: System.BadImageFormatException – Rob

+0

Awesome. Его ссылка была тем, что напомнило мне о конфиге, так что определенно согласиться с его ответом. – Randolpho

4

Посмотрите на это: In-Process Side-by-Side Это может иметь некоторую помощь.

+1

Да, это трюк! – Rob

+0

Извините. Я идиот. К сожалению, это не помогло, если я ничего не пропустил. Когда я проверил это, мне удалось раскомментировать перенаправление сборки. Без перенаправления он не работает. – Rob

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

  • Нет связанных вопросов^_^