C # / .NET - CodeDom.Compiler Set Атрибуты Информация о сборке - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок в C # и пытаюсь использовать .NET CodeDom.Compiler для компиляции приложения и правильной генерации информации о сборке в выходном exe-файле.Я искал в справочнике MS Docs / Class, чтобы сделать это.Можно ли установить информацию о сборке во время компиляции?

Код для компиляции моего исходного кода:

CompilerParameters CParams = new CompilerParameters();
CParams.GenerateExecutable = true;
CParams.OutputAssembly = Output;

string options = "/optimize+ /platform:x86 /target:winexe /unsafe";
if (Icon != null)
    options += " /win32icon:\"" + Icon + "\"";

CParams.CompilerOptions = options;
CParams.TreatWarningsAsErrors = false;
CParams.ReferencedAssemblies.Add("System.dll");
CParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
CParams.ReferencedAssemblies.Add("System.Drawing.dll");
CParams.ReferencedAssemblies.Add("System.Data.dll");
CParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");

Dictionary<string, string> ProviderOptions = new Dictionary<string, string>();
ProviderOptions.Add("CompilerVersion", "v2.0");

CompilerResults Results = new CSharpCodeProvider(ProviderOptions).CompileAssemblyFromSource(CParams, source);

Выведенная информация о сборке Exe:

enter image description here

Доступна ли эта функция, когда я на самом деле сохраняю exe с помощью устройства записи?

Writer.WriteResource(FSave.FileName, EncryptedBytes);

Я очень благодарен за любые предложения, спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Вместо вашей последней строки

        ...
        var unit = new CodeCompileUnit();
        var attr = new CodeTypeReference(typeof(AssemblyVersionAttribute));
        var decl = new CodeAttributeDeclaration(attr, new CodeAttributeArgument(new CodePrimitiveExpression("1.0.2.42")));
        unit.AssemblyCustomAttributes.Add(decl);
        var prov = new CSharpCodeProvider(ProviderOptions);
        var assemblyInfo = new StringWriter();
        prov.GenerateCodeFromCompileUnit(unit, assemblyInfo, new CodeGeneratorOptions());

        var result = prov.CompileAssemblyFromSource(CParams, new[] {"public class p{public static void Main(){}}", assemblyInfo.ToString()});

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

msdn

...