Как скомпилировать, если версия .NET 4 или выше - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть класс из проекта A (.NET 4), который использует класс AggregateException. Я сейчас импортирую этот же класс в проект B, который я s .NET 3.5. Класс AggregateException не существует для 3.5. Есть ли способ использовать #if и отражение или что-то еще, чтобы игнорировать улов (AggregateException), если проект, в котором он существует, не является .NET 4?

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Нет - вам нужно создать отдельную версию проекта для .NET 3.5, если вы хотите использовать ее из приложения .NET 3.5.

Невозможно загрузить сборку .NET 4, даже если вы не используете функции .NET 4, из .NET 3.5.

Единственное место, где может помочь директива #if, - это если вы хотите, чтобы ваш файл имел определение, основанное на цели платформы. Это должно происходить внутри файла в вашем проекте Project A, и вам потребуются два проекта (которые могут включать в себя одни и те же исходные файлы), так как один проект не может быть настроен на две отдельные версии платформы. (Вы всегда можете изменить рамки, но это не всегда тривиально ...)

Как говорится, это, скорее всего, не будет работать напрямую. Если ваша библиотека .NET 4 перехватывает AggregateException, это означает, что она использует некоторую функциональность, которая вызывает это исключение - этот вызов метода, скорее всего, является функцией только .NET 4, поскольку это исключение является новым в .NET 4 и обычно происходит только при использовании чего-то вроде TPL.

0 голосов
/ 06 декабря 2011

Иногда мы справляемся с этим путем творческого использования условных компиляций и классов-заглушек.

В вашем случае мы бы, вероятно, добавили бы класс-заглушку, например:

namespace System
{
    class AggregateException: Exception
    {
    }
}

и просто включите этот класс в проект 3.5.

...