سؤال

لدي مشكلة تعمل مع microsoft.build.buildengine. الذي من المفترض أن تحصل ثابت مع تعديل ملف. exe.config لإضافة ما يلي.

<?xml version ="1.0"?>
<configuration>
        <runtime>
           <assemblyBinding xmlns="urnchemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
            </dependentAssembly>
                <assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

مشكلتي هي أنه لا يمكنني تعديل الملف، لا بد لي من إصلاحه حسب الرمز، وأعتقد أن هذا من المفترض أن يكون ممكنا، أليس كذلك؟

ولكن كيف؟، كيف يمكنني تعديل طلبي حتى يتم تشغيله كما لو كانت التغييرات المذكورة أعلاه في ملف التكوين؟

هل كانت مفيدة؟

المحلول

كنت تكافح فقط مع مشكلة مماثلة. المفتاح هو استخدام appdomain.assemblyresolve. حدث. إليك ما يشبه رمزي:

    public void LoadStuff(string assemblyFile)
    {
        AppDomain.CurrentDomain.AssemblyResolve += 
            new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        var assembly = Assembly.LoadFrom(assemblyFile);

        // Now load a bunch of types from the assembly...
    }

    Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var name = new AssemblyName(args.Name);
        if (name.Name == "FooLibrary")
        {
            return typeof(FooClass).Assembly;
        }
        return null;
    }

يتجاهل هذا تماما رقم الإصدار ويدعي المكتبة المحملة بالفعل لأي مرجع مكتبة باسم "foolibrary". يمكنك استخدام السمات الأخرى لل AssemblyName فئة إذا كنت تريد أن تكون أكثر تقييدا. FooClass يمكن أن يكون أي فئة في جمعية foolibrary.

نصائح أخرى

إحدى طرق القيام بذلك هي إنشاء تطبيق Bootstrapping الذي عند إطلاقه بدء التطبيق الأصلي في تطبيق AppDomain منفصل. عند إعداد المجال الجديد، ستتمكن من إنشاء ملف التكوين برمجيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top