我希望这是一个很容易解决的问题。
我有一个加密库,将用于NET1.1应用程序及更高版本。 X509Certificate类在NET1.1中,X509Certificate2在NET2.0及更高版本中。
我想做类似的事情:
#if NET1.1
public void LoadKeys(X509Certificate cert)
{
....
}
#else
public void LoadKeys(X509Certificate2 cert)
{
....
}
#endif
我缺少的是编译符号!
我发现NET20,NET30和NET40存在。但是我想做“如果NET1.1,那么这样做;否则,请使用高级模型”。
另外,奖金问题:),我是否必须分别在NET1.1和NET2.0中编译才能按预期工作?
或者我可以在NET1.1中编译DLL然后放入只有NET2.0的机器,希望ILM会转到新的框架吗?
由于
答案 0 :(得分:1)
你的代码已经做了你想要的 - 如果没有定义“NET1.1”符号,它将使用第二段代码。
是的,你必须为1.1和2.0单独编译才能使用,因为你最终会得到不同的结果 - 最终只有第一次重载;一个人最终只会遇到第二次超载。
您可能可以运行2.0及更高版本的1.1代码 - 这是正常情况 - 但是因为您不能拥有包含和>方法的两个版本的单个版本em> 1.1兼容,你也可以使用两个版本。
一种选择是两种方法都出现在.NET 2+版本中,以保留最初针对要构建的1.1版本构建的应用程序的向后兼容性:
public void LoadKeys(X509Certificate cert)
{
....
}
#if !NET1.1
public void LoadKeys(X509Certificate2 cert)
{
....
}
#endif
编辑:只是为了澄清与Artur讨论中的几点意见:
您可能还想阅读.NET 4 Migration Guide。
最后,我要指出.NET 1.1现在真的旧 - 如果你知道你需要支持它,那那就足够了,但我个人试图让客户来如果可能的话升级:)