Можно ли статически обмениваться кодом между проектами в C #? - PullRequest
5 голосов
/ 05 октября 2011

Можно ли в C # обмениваться кодом между проектами Visual Studio без необходимости распространять DLL?

Я поддерживаю некоторое программное обеспечение, состоящее из нескольких проектов Visual Studio C #, каждый из которых представляет собой простой консольный исполняемый файл. Между проектами есть много общего кода, который я хотел бы удалить. Я полагаю, что могу поместить код в проект библиотеки классов, но я бы предпочел не использовать DLL для распространения с каждым из исполняемых файлов.

Есть ли способ обойти это? Я новичок в C #, так что, возможно, я все равно думаю об этом все неправильно - есть ли альтернативные предложения?

Ответы [ 9 ]

4 голосов
/ 05 октября 2011

Вы можете использовать ILMerge для объединения библиотеки классов с exe.

http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

3 голосов
/ 05 октября 2011

Вы можете добавить код в виде связанных файлов в Visual Studio - щелкните правой кнопкой мыши по проекту, выберите «Добавить / существующий элемент» и нажмите кнопку «Добавить», нажмите стрелку выпадающего меню и выберите «Добавить как ссылку».

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

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

3 голосов
/ 05 октября 2011

Ну, лично я предпочел бы кусать пулю и распространять DLL.Это самый чистый и самый идиоматический вариант.

Другие опции:

  • Вы можете добавить «ссылку» на существующий исходный файл за пределами каталога проекта, если я правильно помню, но это »это будет несколько странно.
  • Вы можете использовать ilmerge , чтобы объединить библиотеку классов с исполняемым файлом в качестве шага после сборки
1 голос
/ 05 октября 2011

Один из вариантов - использовать ilmerge .

ilmerge /target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll

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

0 голосов
/ 05 октября 2011

В дополнение ко всем другим опубликованным замечательным методам вы можете упаковать DLL как встроенный ресурс вашего EXE-файла и загрузить сборку в память во время выполнения, используя Assembly.Load(byte[]).

0 голосов
/ 05 октября 2011

Возможен обмен кодами между проектами.Просто создайте решение VS.NET.Добавьте каждый проект в решение.Примените соответствующие ссылки проекта.Ваше единственное решение VS.NET может иметь n проектов, которые создаются для консольных приложений.На сегодняшний день это самый простой способ поделиться кодом между проектами.

0 голосов
/ 05 октября 2011

Возможно, вы хотите встроить или объединить сборку библиотеки классов в сборку вашего исполняемого файла. Это обсуждалось ранее. Попробуйте здесь: Встраивание сборок в другую сборку

0 голосов
/ 05 октября 2011

Я не уверен, какой у тебя идеальный сценарий? Если вы не хотите распространять какие-либо дополнительные файлы, тогда код должен находиться в вашем исполняемом файле. Вы можете ссылаться на один exe из другого, но тогда, если exe A ссылается на exe B, это означает, что вы не можете распространять A без распространения B.

0 голосов
/ 05 октября 2011

Когда вы добавляете файл в проект, на кнопке добавления появляется выпадающий список, чтобы добавить его в качестве связанного содержимого.

Затем изменения в исходном местоположении отражаются в связанном.

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