سؤال

وأنا أحاول أن أفعل شيئا قليلا غير عادية ...

ولدي هذه الفئة فو:

public class Foo
{
    public Foo(string name)
    {
        this.Name = name;
    }

    internal Foo()
    {
    }

    public string Name { get; internal set; }
    public int Age { get; set; }
}

لاحظ واضع الداخلية للاسم، ومنشئ افتراضي الداخلي. وهذا من شأنه منع عادة التسلسل XML، ولكن أنا أيضا شهد التجمع التسلسل XML بأنه "صديق" مع InternalsVisibleTo:

[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers")]

وأضاف I مهمة MSBuild إلى ما قبل إنشاء الجمعية التسلسل:

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
  <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
    <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
  </SGen>
</Target>

وهذا يعمل بشكل جيد: الخاصية اسم غير متسلسلة وإلغاء تسلسل بشكل صحيح

.

والآن، أريد أن يوقع التجمع بلدي ... وهكذا يمكنني تحديد ملف مفتاح لتجميع بلدي، وأنا تعديل الإعلان InternalsVisibleTo لتتناسب مع مفتاح:

[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers, PublicKey=c5cd51bf2cc4ed49")]

ولكن الآن فشل SGEN:

<اقتباس فقرة>   

وغير قادر على إنشاء فئة مؤقتة (نتيجة = 1).
  لا يمكن تعيين خاصية أو مفهرس "TestXML2008.Foo.Name" ل- للقراءة فقط

والمهمة SGEN يجب اختيار ملف مفتاح من خلال وحدات الماكرو، ولكن يبدو أن هذا لا يكفي ... حاولت أيضا لتحديد ملف مفتاح صراحة في مهمة SGEN، ولكن دون جدوى. لدي نفس النتيجة عند استخدام sgen.exe على سطر الأوامر ...

وأنا شيء مفقود؟ لا أستطيع أن أفهم لماذا لا يعمل عندما توقيع التجميع ...

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

المحلول

في السمة InternalsVisibleTo، تحتاج إلى تحديد المفتاح العمومي الكامل، وليس فقط رمز المفتاح العمومي.

هذه الإجابة على سؤال مماثل و <لأ href = " http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx "يختلط =" نوفولو noreferrer "> هذا المقال MSDN للحصول على معلومات حول كيفية الحصول على المفتاح العمومي.

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