Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net SGEN、内部可视和装配签名_.net_Xml Serialization_Strongname_Sgen_Internalsvisibleto - Fatal编程技术网

.net SGEN、内部可视和装配签名

.net SGEN、内部可视和装配签名,.net,xml-serialization,strongname,sgen,internalsvisibleto,.net,Xml Serialization,Strongname,Sgen,Internalsvisibleto,我想做一些不寻常的事 我有这样一门课: public class Foo { public Foo(string name) { this.Name = name; } internal Foo() { } public string Name { get; internal set; } public int Age { get; set; } } 注意名称的内部setter和内部默认构造函数。这通常会阻止X

我想做一些不寻常的事

我有这样一门课:

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

    internal Foo()
    {
    }

    public string Name { get; internal set; }
    public int Age { get; set; }
}
注意名称的内部setter和内部默认构造函数。这通常会阻止XML序列化,但我还使用InternalsVisibleTo将XML序列化程序集标记为“friend”:

[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers")]
我添加了一个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>
但现在斯根失败了:

无法生成临时类(结果=1)。
无法将属性或索引器“TestXML2008.Foo.Name”分配给--它是只读的

SGEN任务应该通过宏选择密钥文件,但显然这还不够。。。我还尝试在SGEN任务中显式指定密钥文件,但没有成功。我在命令行上使用sgen.exe时得到了相同的结果


我错过什么了吗?我无法理解为什么在对程序集签名时它不起作用…

在InternalsVisibleTo属性中,您需要指定完整的公钥,而不仅仅是公钥令牌


有关如何获取公钥的信息,请参阅和。

它可以工作,谢谢!我被InternalsVisibleToAttribute的MSDN文档中的示例误导了:示例中显示的密钥非常短,所以我认为它是公钥令牌。。。
[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers, PublicKey=c5cd51bf2cc4ed49")]