2013-06-26 1 views
0

У меня есть некоторый общий код, который работает на двух типах машин:Если мой код ссылается на сборку при сборке, нужно ли ее распространять?

  • .NET 2.0 полной базы по типу сервера машин
  • .NET Compact Framework 2.0 на устройствах Windows CE

У меня есть которая добавляется в полнофункциональные устройства, но этот код не будет запускаться для компактных каркасных устройств.

Должен ли я по-прежнему распространять ссылочную DLL на устройства Windows CE?

Подумайте об этом, так как код находится в разных файлах, я просто опускаю файлы из решения Windows CE, но мне все же хотелось бы, чтобы приведенный выше вопрос ответил с технической точки зрения.

Марк

ответ

0

Если вы ссылаетесь ваша библиотека с помощью раннего связывания (правая кнопка мыши на проекте -> Add Reference), вам нужно будет распространять его вместе с кодом. Это связано с тем, что метаданные кода будут ссылаться на ссылочную библиотеку. Чтобы сделать вопросы еще более интересными, если ссылка на библиотеку ссылается на другие библиотеки таким же образом, они также должны быть доступны для CLR для поиска и загрузки.

Но, если вы используете такую ​​технику, как отражение и обнаружение и сделайте привязку во время выполнения, вы сможете загрузить приложение без возможности CLR, чтобы находить библиотеку, пока ваш код не нуждается в ней (назовите ее через отражение)

0

На самом деле вам не нужно даже использовать код иногда :-) Например если вы используете константы или перечисления, вам не нужна dll, если вы не используете код, который использует тип перечисления. Так что, если у вас есть код, который не запускается, вы не можете распространять dll. Но иногда вы можете иметь typeloadexception, если ваш код, как этот

if (condition) 
    use type from another library 
else 
use type from current library 

Если условие не какая-то компиляция зависит константа, JITer не может сделать правильное предположение, что код не будет работать, то он будет пытаться загрузить тип, а затем у вас есть исключение. В таких случаях я бы использовал условную компиляцию, как это

#if COMPACT 
//use type here 
#else 
//not use type here 
#endif