2014-09-06 2 views
0

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

CompilerParameters loParameters = new CompilerParameters(); 
loParameters.ReferencedAssemblies.Add("C:\A.dll") 
loParameters.ReferencedAssemblies.Add("C:\B.dll") 

Поэтому я должен освободить эти сборки («A.DLL» и «B.dll») с моим программным обеспечением, но из-за соображений безопасности я не хочу, пользователь может получить доступ к источнику этих сборок с помощью обратный инжиниринг.

Примечание 1: Я могу удалить реализацию методов в необходимых сборках (A и B), но мои сборки очень большие, и я не могу сделать это вручную.

Примечание 2: Я знаю об обфускации, но я не хочу использовать это.

Примечание 3: Мне просто нужно скомпилировать код успешно, и я не хочу его запускать.

ответ

0

Я полагаю, что A.dll и B.dll являются сборками, которые ваши?

Если да, то подход должен заключаться в том, чтобы открывать интерфейсы только для этих библиотек (т.е. размещать ваши интерфейсы и реализации в отдельных сборках), а затем отправлять интерфейсные сборки.

Таким образом, было бы нечего декомпилировать/перепроектировать, и это позволило бы компилятору быть счастливым.

Чтобы сгенерировать упомянутые сборки легко, вы можете использовать Roslyn для: удаления каких-либо частных (полей, свойств, методов и т. Д.) Или ненужных (статические конструкторы, встроенные инициализаторы и т. Д.), Заменить тело публичных методов открытых классов броском новый NotImplementedException(), например, и скомпилировать только это.

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

+0

Ответ обновлен. –

+0

Это фантастика, я попробую об этом и сообщит вам о результатах. спасибо :) –

+0

Мне нужно больше времени, чтобы прочитать об этом. еще раз спасибо. –

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