Добавить описание файла программно в выходной файл компилятора c # - PullRequest
0 голосов
/ 03 июня 2018

Это моя функция компилятора, и она работает очень хорошо.Но выходной файл не имеет описания, например Copyright, ProductVersion или FileDescription:

public static bool CompileFromSource(string source, string output, string icon = null, string[] resources = null)
    {
        CompilerParameters cParams = new CompilerParameters
        {
            GenerateExecutable = true,
            OutputAssembly = output
        };

        string options = "/optimize+ /platform:x86 /target:winexe /unsafe";

        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");

        if (resources != null && resources.Length > 0)
        {
            foreach (string res in resources)
            {
                cParams.EmbeddedResources.Add(res);
            }
        }

        Dictionary<string, string> providerOptions = new Dictionary<string, string> { { "CompilerVersion", "v2.0" } };
        CompilerResults results = new CSharpCodeProvider(providerOptions).CompileAssemblyFromSource(cParams, source);
}

Как я могу программно добавить это описание моего файла в этот компилятор?И я не хочу использовать сторонние приложения, такие как resourceHacker

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Это можно сделать другим способом, добавив:

[assembly: AssemblyTitle("Loader")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Loader")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("f99d6ga6-3b37-43a6-9332-866f8s8g7f9b")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

В начало источника, который вы хотите программно скомпилировать

0 голосов
/ 03 июня 2018

Не могли бы вы просто добавить / добавить [assembly: ...] в строку source?

Если нет, то здесь можно найти стандартный синтаксис Roslyn-as-code: https://roslynquoter.azurewebsites.net/

[assembly: MyAttribute]
namespace S {
    class C { }
}

Результат:

CompilationUnit()
    .WithAttributeLists(
        SingletonList<AttributeListSyntax>(
            AttributeList(
                SingletonSeparatedList<AttributeSyntax>(
                    Attribute(IdentifierName("MyAttribute")))) 
               .WithTarget(
                    AttributeTargetSpecifier(
                       Token(SyntaxKind.AssemblyKeyword))))) 
    .WithMembers(
        SingletonList<MemberDeclarationSyntax>(
            NamespaceDeclaration(IdentifierName("S"))
                .WithMembers(
                    SingletonList<MemberDeclarationSyntax>(
                        ClassDeclaration("C")))))
    .NormalizeWhitespace()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...