.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")]