Stu*_*art 7 xamarin.ios xamarin.android portable-class-library
PCL在MonoTouch和MonoDroid中运行良好.
但是,有时候,当我使用变量引用PCL中的Type,然后我尝试在MonoX客户端中使用相同的引用时,编译器会失败并显示如下消息:
"System.Collections.Specialized.INotifyCollectionChanged"类型在未引用的程序集中定义.您必须添加对程序集'System.Windows,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'的引用.
这里的问题是在MonoDroid中,我的System.Collections.Specialized.INotifyCollectionChangedPCL是在一个垫片类型转发DLL中提供的 - 比如https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/System.Windows - 很明显,DLL无法使用Microsoft的签名私钥.
更多信息:
任何人都可以建议任何解决方法吗?例如,有没有办法关闭强大的装配命名保护?
我认为如果PCL要在微软出货的.Net实现之外真正移植,那么这是必要的吗?
从管理员 VS 命令提示符处,您可以运行以下命令:
\n\nsn -Vr *,7cec85d7bea7798e\nRun Code Online (Sandbox Code Playgroud)\n\n这将跳过任何使用 7cec85d7bea7798e 作为公钥令牌的程序集的强名称验证。然后您应该能够使用该密钥延迟签署您的 shim DLL。我认为您可以sn -pc从 DLL 中提取密钥的公共部分,以便将其用于延迟签名。
这应该允许您使用垫片进行编译。当然,它也需要在运行时工作。我认为 MonoTouch 和 MonoDroid 实际上并不验证程序集的强名称键,因此它会起作用。如果他们确实进行了此验证,那么我认为您无能为力。在这种情况下,Mono 需要进行一些更改以支持这些类型引用或忽略填充程序的密钥,或者 Microsoft 需要提供您可以使用的填充程序 DLL 的签名版本。
\n\n请注意,我不是安全专家,因此我不知道在您的计算机上禁用这些 Microsoft 密钥的强名称验证可能会产生什么样的安全影响。我认为不会有什么重大影响...
\n\n丹尼尔的详细跟进:
\n\n我认为这是您需要解决 Mono 上可移植库的类型共享/强名称签名问题的方法:
\n\n-> 提取System.Windows.dll的公钥,并将其放入Droid System.Windows项目的项目目录中:
\n\n Sn \xe2\x80\x93e "C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETPortable\\v4.0\\Profile\\Profile104\\System.Windows.dll" system_windows.snk\nRun Code Online (Sandbox Code Playgroud)\n\n-> 修改 Droid system.windows 项目以使用提取的密钥进行延迟签名。将以下内容放入 csproj 文件的 PropertyGroup 中:
\n\n<SignAssembly>true</SignAssembly>\n<AssemblyOriginatorKeyFile>system_windows.snk</AssemblyOriginatorKeyFile>\n<DelaySign>true</DelaySign>\nRun Code Online (Sandbox Code Playgroud)\n\n-> 将 Droid System.Windows 项目(在 AssemblyInfo.cs 中)的程序集版本更改为:
\n\n2.0.5.0 \nRun Code Online (Sandbox Code Playgroud)\n\n在我的测试中,我\xe2\x80\x99t似乎不需要禁用强名称验证。因此,我不认为\xe2\x80\x99t 会给新手\xe2\x80\x93 带来任何额外的障碍,一旦你进行了这些更改,他们\xe2\x80\x99 只需要获取你的代码,它将正确构建。
\n\n但是,如果您确实遇到问题,请尝试从管理 VS 命令提示符运行以下命令:
\n\n sn -Vr *,7cec85d7bea7798e \nRun Code Online (Sandbox Code Playgroud)\n\n让我知道这是如何运作的!
\n\n谢谢,
\n\n丹尼尔
\n| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |