दोनों के संदर्भ हैं, मैं गतिशील रूप से एक क्लास का निर्माण कर रहा हूं जो Microsoft.OData.Client का उपयोग करता है इस लाइब्रेरी में mscorlib 2.0.5.0 दोनों के संदर्भ हैं (i पीसीएल अनुमान लगाएं) और 4.0.0.0। कॉन्फ़्रेंस करने के लिए रोस्लिन को कैसे प्राप्त किया जाए जब असेंबली के पास mscorlib 2.0.5.0 और 4.0.0.0
मैं एक बड़े कार्यक्रम के हिस्से के रूप में अपनी कक्षा को रोस्लिन के साथ संकलित करना चाहता हूं, लेकिन मुझे इसे काम करने के लिए प्रतीत नहीं होता है। मेरे रोसलिन संकलक कोड बहुत minimalistic है
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(s);
string assemblyName = Path.GetRandomFileName();
List<MetadataReference> references = new List<MetadataReference>()
{
MetadataReference.CreateFromFile(typeof(DataServiceActionQuery).Assembly.Location),
MetadataReference.CreateFromFile(typeof(ODataAction).Assembly.Location),
MetadataReference.CreateFromFile(typeof(GeneratedCodeAttribute).Assembly.Location),
MetadataReference.CreateFromFile(typeof(IEdmModel).Assembly.Location),
MetadataReference.CreateFromFile(typeof(TimeOfDay).Assembly.Location),
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location),
MetadataReference.CreateFromFile(typeof(XmlDocument).Assembly.Location),
// MetadataReference.CreateFromFile(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\Profile\Profile328\mscorlib.dll")
};
references.AddRange(Directory.GetFiles(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades").Select(f => MetadataReference.CreateFromFile(f)));
var op = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);
//op.WithAssemblyIdentityComparer(DesktopAssemblyIdentityComparer.Default);
//CSharpCompilationOptions.WithAssemblyIdentityComparer(DesktopAssemblyIdentityComparer.Default);
CSharpCompilation compilation = CSharpCompilation.Create(
assemblyName,
syntaxTrees: new[] { syntaxTree },
references: references,
options: op);
Assembly assembly = null;
using (var ms = new MemoryStream())
{
EmitResult result = compilation.Emit(ms);
if (!result.Success)
{
IEnumerable<Diagnostic> failures = result.Diagnostics.Where(diagnostic =>
//diagnostic.IsWarningAsError ||
diagnostic.Severity == DiagnosticSeverity.Error);
foreach (Diagnostic diagnostic in failures)
{
Console.Error.WriteLine("{0}: {1}", diagnostic.Id, diagnostic.GetMessage());
}
}
else
{
ms.Seek(0, SeekOrigin.Begin);
assembly = Assembly.Load(ms.ToArray());
}
}
इन त्रुटियों कर रहे हैं मैं
CS0012: प्रकार 'वस्तु' एक विधानसभा संदर्भित नहीं है में परिभाषित किया गया है। आपको असेंबली 'mscorlib, संस्करण = 2.0.5.0, संस्कृति = तटस्थ, PublicKeyToken = 7cec85d7bea7798e, retargetable = Yes' का संदर्भ जोड़ना होगा।
CS0012: प्रकार 'XmlReader' को उस असेंबली में परिभाषित किया गया है जिसका संदर्भ नहीं दिया गया है। आपको असेंबली 'System.Xml, संस्करण = 2.0.5.0, संस्कृति = तटस्थ, PublicKeyToken = 7cec85d7bea7798e, retargetable = Yes' का संदर्भ जोड़ना होगा।
आप एक विधानसभा अपने app.config करने के लिए उन विधानसभाओं के लिए अनुप्रेषित जोड़ने की कोशिश की? (और * .exe.config के विस्तार से) – Guvante
मैं कुछ भी करने के लिए असेंबली रीडायरेक्ट नहीं कर सकता - यह भी नहीं सोचता कि यह समस्या है। समस्या यह है कि मैं रोसलीन कंपाइलर कैसे स्थापित करता हूं। – sjkp
आईआईआरसी 'डेस्कटॉपएस्प्लोर्सइडेन्टिटी कॉम्पैयर' ने एक बार मेरे लिए इस मुद्दे को हल किया। नोट हालांकि, 'CSharpCompilationOptions' भी अपरिवर्तनीय है ... क्या आपने' op = op.SAssemblyIdentityComparer (डेस्कटॉपAssemblyIdentityComparer.Default) 'की कोशिश की है? – m0sa