রোজলিনে সিস্টেম.ডাইনামিক ব্যবহার করা


96

গতিশীল এবং ExpandoObject ব্যবহার করতে গতকাল প্রকাশিত রোজলিনের নতুন সংস্করণ সহ যে উদাহরণটি এসেছে তা আমি সংশোধন করেছি তবে আমি একটি সংকলক ত্রুটি পাচ্ছি যা আমি কীভাবে ঠিক করব তা নিশ্চিত নই। ত্রুটিটি হ'ল:

(7,21): ত্রুটি CS0656: অনুপস্থিত সংকলকটির প্রয়োজনীয় সদস্য 'মাইক্রোসফ্ট.সিএসআরপি.রুনটাইমবাইন্ডার.সিএসআরপিআরগমেন্ট ইনফোর.ক্রেট'

আপনি কি এখনও নতুন সংকলকটিতে গতিবিদ্যা ব্যবহার করতে পারবেন না? আমি এটা কিভাবে ঠিক করবো? আমি আপডেট করেছি যে উদাহরণ এখানে:

[TestMethod]
public void EndToEndCompileAndRun()
{
    var text = @"using System.Dynamic;
    public class Calculator
    {
        public static object Evaluate()
        {
            dynamic x = new ExpandoObject();
            x.Result = 42;
            return x.Result;
        } 
    }";

    var tree = SyntaxFactory.ParseSyntaxTree(text);
    var compilation = CSharpCompilation.Create(
        "calc.dll",
        options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
        syntaxTrees: new[] {tree},
        references: new[] {new MetadataFileReference(typeof (object).Assembly.Location), new MetadataFileReference(typeof (ExpandoObject).Assembly.Location)});

    Assembly compiledAssembly;
    using (var stream = new MemoryStream())
    {
        var compileResult = compilation.Emit(stream);
        compiledAssembly = Assembly.Load(stream.GetBuffer());
    }

    Type calculator = compiledAssembly.GetType("Calculator");
    MethodInfo evaluate = calculator.GetMethod("Evaluate");
    string answer = evaluate.Invoke(null, null).ToString();

    Assert.AreEqual("42", answer);
}

উত্তর:


219

আমি মনে করি যে আপনি উল্লেখ করা উচিত Microsoft.CSharp.dllসমাবেশ


4
হ্যাঁ, এটি এমন কিছু বিষয় যা dynamicপ্রবর্তনের পরে থেকেই প্রয়োজনীয় ছিল।
খেলাং

19
এবং যদি মাইক্রোসফ্ট কোনও ত্রুটি বার্তা দেয় যা আপনাকে বলেছিল এটি বিষয়গুলি এত সহজ করে দেবে।
কেজবার্টেল

4
আমি জানি না এটি ইস্যুটি স্থির করেছে কি না, তবে আমি আমার ভিউ / ওয়েবকনফিগ <নেমস্পেসেস> নোডে <যুক্ত নেমস্পেস = "মাইক্রোসফ্ট.সিএসআরপি" /> যুক্ত করেছি। সংকলক ত্রুটি এখন চলে গেছে।
ডন রোলিং

4
FWIW মাইক্রোসফ্ট.সিএসআরপি.ডিএল মানে ভেরি স্ক্রিপ্টঅপশনস = স্ক্রিপ্টঅপশনস.ডাফল্ট.উইথ রেফারেন্সস ("মাইক্রোসফ্ট.সিএসআরপ") অর্থাৎ ডেলি ড্রপ করুন। আমাকে কয়েক মিনিটের জন্য আটকে রেখেছে :)
জন এইচ

@JonH আমরা AssemblyInfo.cs যে লাইন যোগ করা উচিত অথবা কোথাও তাই পরিবর্তে Dll উল্লেখ করেছেন?
এনএইচ।

9

কোডটি কাজ করতে। নেট কোর ২.১ এ সংকলনে আমাকে এই তথ্যগুলি যুক্ত করতে হয়েছিল:

var compilation = CSharpCompilation.Create(
    "calc.dll",
    options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
    syntaxTrees: new[] {tree},
    references: new[] {
        MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
        MetadataReference.CreateFromFile(typeof(ExpandoObject).Assembly.Location),
        MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.CSharp")).Location),
        MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("netstandard")).Location),
        MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location),
        MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Runtime")).Location),            
    }
);

আপনি System.Linq.Expressions, System.Private.CoreLib, System.Runটাইম এবং Microsoft.Sharp, সবগুলি স্ট্রিং হিসাবে পেয়ে যেতে পারেন
সাইমন মউরিয়ার

7

এএসপি.নেট এমভিসি নির্দিষ্ট:

আপনি যদি [FromBody]কোনও POSTপদ্ধতিতে রাখতে ভুলে যান তবে আপনি এই ত্রুটিটি এমভিসি 6 নিয়ামকটিতে পেতে পারেন ।

    [HttpPost("[action]")]
    public void RunReport([FromBody]dynamic report)
    {
        ...
    }

.NETCore ডিফল্ট প্রকল্পটিতে ইতিমধ্যে Microsoft.CSharpরেফারেন্স অন্তর্ভুক্ত রয়েছে তবে আপনি একই বার্তাটি পেয়ে যান।

সঙ্গে [FromBody]যোগ আপনি এখন তাদেরকে JSON পোস্ট করতে পারেন এবং তারপর মাত্র পরিবর্তনশীল বৈশিষ্ট্য অ্যাক্সেস :-)


অনুভূত হয়েছে যে এটি 2014 থেকে পোস্ট করা মূল প্রশ্নের ক্ষেত্রে প্রযোজ্য নয় (যদিও এটি স্বীকার করতে চেয়েছিল এটি সহায়ক ছিল)) এসও শিষ্টাচার এমন পরিস্থিতিতে কী নির্ধারণ করেছিল তা নিশ্চিত ছিলেন না।
tj

ফেয়ার পয়েন্ট :) আমি এটিকে এখানে কেবল যুক্ত করেছি কারণ এটি এতটা অস্পষ্ট বলে মনে হয়েছিল এবং এই ত্রুটির জন্য এটি একটি ভাল মিল ছিল
সাইমন_উইভার

4

আপনি আপনার সমস্ত প্রকল্পের রেফারেন্সের বৈশিষ্ট্যও যাচাই করতে চাইতে পারেন। কোনও রেফারেন্স ২.০ এর চেয়ে নতুন। নেট ব্যবহার করছে তা নিশ্চিত করুন। আমার একটি প্রকল্প রয়েছে যা একই সমাধানে অন্য প্রকল্পকে উল্লেখ করে এবং একটি নতুন .NET ফ্রেমওয়ার্ক লক্ষ্য ব্যবহার করে নির্ভরতা পুনর্নির্মাণ করতে হয়েছিল।

এই পোস্টটি দেখুন ।

এছাড়াও, Microsoft.CSharp@ আলবার্তো যেমন বলেছিলেন তেমন আপনার মূল প্রকল্পটি উল্লেখ করতে ভুলবেন না ।


1

যদি আপনার প্রকল্পটি টার্গেট করে। নেট কোর বা। নেট স্ট্যান্ডার্ড, তবে রেফারেন্স যুক্ত করার পরিবর্তে আপনি এই ত্রুটিটি সমাধান করার জন্য মাইক্রোসফ্ট.সিএসআরপি নিউগেট প্যাকেজটি ইনস্টল করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.