Атрибуты в CSharpCodeProvider - PullRequest
       36

Атрибуты в CSharpCodeProvider

0 голосов
/ 18 октября 2019

Я пытаюсь скомпилировать некоторый простой код (класс ac #), который использует собственный атрибут. CSharpCodeCompiler не выдает ошибку, если мои свойства класса не используют пользовательский атрибут.

это моя строка:

string _string = @"
using System;
using System.Collections.Generic;

namespace Generator
{
    public class ExampleClass
    {
        public int id { get; set; }

    }
}"

        var csc = new CSharpCodeProvider();
        var cc = csc.CreateCompiler();
        CompilerParameters cp = new CompilerParameters();

        cp.ReferencedAssemblies.Add("mscorlib.dll");
        cp.ReferencedAssemblies.Add("System.dll");
        cp.ReferencedAssemblies.Add("System.ComponentModel.DataAnnotations.dll");
        cp.ReferencedAssemblies.Add("System.ComponentModel.dll");
        cp.ReferencedAssemblies.Add("System.Runtime.InteropServices.dll");
        cp.ReferencedAssemblies.Add(typeof(GUID).Assembly.Location);

        CompilerResults results = csc.CompileAssemblyFromSource(cp, _string);
        System.Reflection.Assembly _assembly = results.CompiledAssembly;
        Type[] _types = _assembly.GetTypes();
        Type eType = _assembly.GetType(namespaceAndClass);

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

Мой класс атрибута:

using System;

namespace Generator
{
    [AttributeUsage(AttributeTargets.All)]
    class GUID : Attribute
    {
        private string guid { get; set; }

        public GUID()
        {
            this.guid = Guid.NewGuid().ToString();
        }

        public GUID(string value)
        {
            this.guid = value;
        }

        public string getGuid()
        {
            return guid;
        }
    }
}

Мне нужно, чтобы строка была скомпилирована с моими пользовательскими атрибутами ... [GUID ()] public int id {get;установлен;}

Когда я пытаюсь это сделать, я получаю эту ошибку: Возникло исключение: 'System.IO.FileNotFoundException' в mscorlib.dll

...