Assemblies 我希望我的DotNetNuke模块在尽可能多的版本下工作,同时避免程序集绑定重定向
我正在开发DotNetNuke模块,自然希望在安装或分发它们之前对它们进行编译。过去,我只是通过浏览本地DotNetNuke安装的/BIN文件夹来引用DotNetNuke.dll的特定版本 这个引用允许我使用DNN基类,并在这些基类上创建我自己的类集。在我需要的DNN名称空间/类中,我还使用了各种帮助器方法。(即,从其PortalModuleBase、ModuleSettingsBase生成派生类,并使用其本地化类替换Microsoft ASP.NET实现提供的本地化类。) 我能够通过这种方法直接引用DLL(Copy Local=True,Specific Version=False),因为到目前为止,我一直在将这些模块安装到我维护的客户端网站上。因此,我至少在我开发的DotNetNuke版本或更新版本上保留了它们。最近,我在开发中引用了6.1.3.108 注意:这会自动将以下关联DLL复制到我的模块的/BIN目录中:Assemblies 我希望我的DotNetNuke模块在尽可能多的版本下工作,同时避免程序集绑定重定向,assemblies,dotnetnuke,versioning,dotnetnuke-module,Assemblies,Dotnetnuke,Versioning,Dotnetnuke Module,我正在开发DotNetNuke模块,自然希望在安装或分发它们之前对它们进行编译。过去,我只是通过浏览本地DotNetNuke安装的/BIN文件夹来引用DotNetNuke.dll的特定版本 这个引用允许我使用DNN基类,并在这些基类上创建我自己的类集。在我需要的DNN名称空间/类中,我还使用了各种帮助器方法。(即,从其PortalModuleBase、ModuleSettingsBase生成派生类,并使用其本地化类替换Microsoft ASP.NET实现提供的本地化类。) 我能够通过这种方法直
- DotNetNuke.dll
- DotNetNuke.Instrumentation.dll
- dotnetnuke.log4net.dll
- DotNetNuke.Services.Syndication.dll
- DotNetNuke.Web.Client.dll
- DotNetNuke.WebControls.dll
- DotNetNuke.WebUtility.dll
提前谢谢 不要引用bin文件夹中的程序集,而是在源代码中保留DotNetNuke.dll的副本(以及任何其他引用),并在那里引用它。将支持的最旧版本放在那里,但在更新的站点上开发。在引用上设置Copy Local=False,这样就不会覆盖较新的版本,而且应该可以
通过这种方式,我们可以在开发运行在DNN 6.1.x上的模块时参考DNN 4.5.3。我多年来一直在使用这种方法,没有出现任何重大问题(除了偶尔忘记关闭“复制本地”和我的DNN站点神秘地爆炸)。关于确定DNN在您从DNN子类化的类中的版本 假设您的类继承自DNNClass,但由于您引用了属性的早期版本,“NewProp”不存在,我会这样做。以下是如何做到这一点:
public class YourClass : DNNClass
{
public string NewPropSubstitute
{
get {
string newPropVal = "your default if earlier DNN";
System.Reflection.PropertyInfo pi = this.GetType().GetProperty("NewProp");
if (pi != null)
newPropVal = (string)pi.GetValue(this, null);
return newPropVal;
}
}
}
这是一个基于内存的猜测,所以它可能无法编译,但你明白了。如果需要,您不必获取DNN版本—只要尝试通过反射获取属性—如果存在,则隐式地获得了正确的版本
当然,如果DNN版本不支持,此方法假定您可以用一个值替换后面的DNN属性(或方法)。但这一切都取决于你想做什么
如果您确实想查找DNN版本(版本安全且始终正确),您可以使用嵌入在我的版本安全jQuery包含代码中的代码,链接自以下博文:
这就是我的开发方式。对于支持各种版本,没有什么灵丹妙药。OP中描述的方法是我推荐的。如果需要,创建自己的扩展子类,并在这些子类中实现反射。很酷的东西,当我从回答我问题的两个人那里购买/推荐模块时,你知道这是一个紧密的社区。谢谢你的参与和我的忠诚@BruceChapman—您能否详细介绍一下如何使用扩展子类和反射。我已经扩展了关键模块和模块设置类。但是说我使用反射来确定加载了哪个版本的DotNetNuke,我如何利用它?(也许可以把它作为另一个答案添加进来,这样我至少可以给你一个支持的投票。)谢谢Bruce,我之前已经读过你的jQuery方法。我经常不喜欢写“如果这个,那么做,否则如果这个,那么做,否则如果,等等”的代码,但绝对公平地说,我没有想到任何方法来解决这个问题!所以,在JavaScript不再是“脚本ey”之前,它将是我们所拥有的一切。再次感谢!(顺便说一句:当我和你聊天时,我禁不住想念澳大利亚。几年前我在那里住了一年多。希望去年夏天天气不太干燥,你的足球队赢了。去柯林伍德吧!)