2015-06-27 28 views
6

Geri kalan derleme düzeyi öznitelikleri çok iyi eklendiğinden ancak AssemblyCopywriteAttribute veya AssemblyCompanyAttribute bildirildiğinde CS0116 ve CS1730 hatalarıyla sonuçlandığı için aptalca bir şey olduğunu anladım. Kodun herhangi bir yöntem bildirimi içermediğini göz önünde bulundurduğumda, CS0116'un nasıl uygulandığını görmüyorum ve serpiştirilmemiş tür tanımları yok, dolayısıyla CS1730'un nasıl uygulanacağından emin değilsiniz.CodeDomProvider aracılığıyla AssemblyCopyrightAttribute veya AssemblyCompanyAttribute kullanırken derleme hatası

Hatalar

Error Number: CS0116 
Error Text: A namespace cannot directly contain members such as fields or methods 

Error Number: CS1730 
Error Text: Assembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations 

Kaynak Dosya:

using System; 
using System.Reflection; 
using System.Runtime.InteropServices; 

[assembly: ComVisible(false)] 
[assembly: CLSCompliant(false)] 
[assembly: AssemblyCompany("My Company")]; // this results in a compile time error 
[assembly: Guid("9d8271d9-957f-46dc-bcc6-1055137b4fad")] 
[assembly: AssemblyTitle("CCDA MAP")] 
[assembly: AssemblyDescription("The mapping logic to source a CXD and populate a CCDA")] 
[assembly: AssemblyCopyright("My Company 2015")]; // this results in a compile time error 
[assembly: AssemblyCulture("en-US")] 
[assembly: AssemblyVersion("2.2.0")] 
[assembly: AssemblyFileVersion("2.2.0.123")] 
[assembly: AssemblyConfiguration("DEBUG")] 
[assembly: AssemblyMetadataAttribute("Built","06/27/2015")] 
[assembly: AssemblyMetadataAttribute("Host","JORMUNGANDR")] 
[assembly: AssemblyMetadataAttribute("The answer","42")] 
[assembly: AssemblyMetadataAttribute("Document Type","CCDA")] 
[assembly: AssemblyMetadataAttribute("Document Spec Version","2.0")] 

Derleme Mantık

CodeDomProvider provider = CodeDomProvider.CreateProvider("C#"); 
var source = Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"codedom"),"*.cs").ToList().Dump("Map Source").Select(i=>File.ReadAllText(i)).ToArray(); 
var parameters = new CompilerParameters{ GenerateInMemory = true, OutputAssembly = string.Format("Map.dll",count),TreatWarningsAsErrors = true, WarningLevel = 4}; 
parameters.ReferencedAssemblies.Add("mscorlib.dll"); 
var results = provider.CompileAssemblyFromSource(parameters, source); 

cevap

7

hata c Metinde hatalı noktalı virgülle aused:

[assembly: AssemblyCopyright("My Company 2015")] // this does not result in a compile time error 

Ve:

[assembly: AssemblyCopyright("My Company 2015")]; // this results in a compile time error 

olmalı

[assembly: AssemblyCompany("My Company")]; // this results in a compile time error 

olmalı:

[assembly: AssemblyCompany("My Company")] // this does not result in a compile time error 

Çıkarma onları hataları temizler görüyorsun.