NET1.1 условная компиляция - PullRequest
       33

NET1.1 условная компиляция

0 голосов
/ 23 сентября 2011

Надеюсь, это очень легко решить.

У меня есть крипто библиотека, которая будет использоваться для приложений NET1.1 и выше. Класс X509Certificate находится в NET1.1, а X509Certificate2 - в NET2.0 и выше.

Я хочу сделать что-то вроде:

#if NET1.1
public void LoadKeys(X509Certificate cert)
{
....
}
#else
public void LoadKeys(X509Certificate2 cert)
{
....
}
#endif

Мне не хватает символа компилятора!

Я обнаружил, что существуют NET20, NET30 и NET40. Однако я хочу сделать «если NET1.1, сделайте это; в противном случае перейдите к расширенной модели».

Кроме того, бонусный вопрос :), нужно ли мне компилировать в NET1.1 и NET2.0 отдельно, чтобы это работало как задумано?

Или я могу скомпилировать DLL в NET1.1, а затем вставить машину с только NET2.0, и, надеюсь, ILM перейдет на новую платформу?

Спасибо

1 Ответ

1 голос
/ 23 сентября 2011

Ваш код уже делает то, что вы хотите - если не определен символ «NET1.1», он будет использовать второй фрагмент кода.

И да, вы должны скомпилировать отдельно для 1.1 и 2.0 дляэто сработает, потому что у вас будут другие результаты - у одного будет только первая перегрузка;одна из них будет иметь только вторую перегрузку.

Вы, вероятно, могли бы запустить код 1.1 в версии 2.0 и выше - это нормальный случай - но, поскольку у вас не может быть одной сборки, котораясодержит обе версии метода , а совместим с 1.1, вы также можете использовать две сборки.

Один из вариантов заключается в том, чтобы оба метода появлялись в сборке .NET 2+, чтобысохранить обратную совместимость для приложений, изначально созданных для сборки 1.1, для которых требуется выполнить миграцию:

public void LoadKeys(X509Certificate cert)
{
....
}
#if !NET1.1
public void LoadKeys(X509Certificate2 cert)
{
....
}
#endif

РЕДАКТИРОВАТЬ: просто уточнить некоторые моменты из обсуждения с Артуром в комментариях:

  • Общее заявление Артура о том, что вы не можете использовать .NET 1.1 в приложении .NET 4, определенно неверно.Я только что сделал это со сборкой .NET 1.1 NUnit (которая была самой простой библиотекой .NET 1.1, которую мне приходилось сдавать)
  • Если вы полагаетесь на безопасность доступа к коду, тогда у есть были изменения там между версиями фреймворка;вам нужно взглянуть на детали того, что вы делаете, чтобы понять, значительны ли различия
  • Вы не можете собрать сборку .NET 2 и запустить ее в .NET1.1 из-за изменения двоичного формата - работает только наоборот.
  • Хотя возможно , что вы полагаетесь на вызов в .NET 1.1, который был удален из более поздней версии.версия .NET, это довольно редкий случай, и его должно быть достаточно легко определить.В общем, Microsoft старается поддерживать обратную совместимость довольно хорошо.

Возможно, вы также захотите прочитать .NET 4 Руководство по миграции .

Наконец, я бы хотелотметьте, что .NET 1.1 сейчас действительно старый - если вы знаете, что вам нужно его поддерживать, то это вполне справедливо, но лично я постараюсь заставить клиентов обновиться, если это вообще возможно:)

...