4

私は DotNetNuke モジュールを開発しており、インストールまたは配布する前にコンパイルする必要があります。以前は、ローカルの DotNetNuke インストールの /BIN フォルダーを参照して、特定のバージョンの DotNetNuke.dll を参照していました。

このリファレンスにより、DNN 基本クラスを使用して、それらに基づいて独自のクラス セットを作成することができました。また、必要な DNN 名前空間/クラス全体でさまざまなヘルパー メソッドを使用しています。(つまり、PortalModuleBase、ModuleSettingsBase から派生クラスを作成し、Microsoft の ASP.NET 実装によって提供されるものを置き換える Localization クラスを使用します。)

これまで私が管理しているクライアント Web サイトにこれらのモジュールをインストールしていたため、直接 DLL 参照 (ローカルのコピー = True、特定のバージョン = False) を作成するこのアプローチを回避することができました。そのため、少なくとも私が開発している DotNetNuke のバージョンまたはそれ以降のバージョンでそれらを保持しています。最近では、開発中に 6.1.3.108 を参照していました。

注: これにより、次の関連 DLL がモジュールの /BIN ディレクトリに自動的にコピーされます。

  • DotNetNuke.dll
  • DotNetNuke.Instrumentation.dll
  • dotnetnuke.log4net.dll
  • DotNetNuke.Services.Syndication.dll
  • DotNetNuke.Web.Client.dll
  • DotNetNuke.WebControls.dll
  • DotNetNuke.WebUtility.dll

これを新しいバージョンの DotNetNuke サイトにインストールすると、問題なく動作しました。これは悪いスタートではありません。

私が疑問に思っているのは、モジュールを DLL のマイナー、ビルド、またはリビジョン レベルに影響されないようにする非ハックな方法があるかどうかということです。

製品 (「ミッドレンジ」バージョンで開発された場合) が、製品の新しいバージョンだけでなく、少し前のバージョンでも動作することを確認することが私の責任であることを認識しています。そうは言っても、これらのビルド全体で徹底的なテストを行うことができると感じています. 私にとって、これは開発中に最も古いメジャー ビルドを実行するよりも優先されます。

別の言い方をすれば、私は 6.0.0.0 への参照を使用して開発したくありません。6.1.3.108 が少し前のバージョンまたはそれ以降のバージョンで動作しているなど、参照を作成する素晴らしい方法を誰かが持っていない場合にのみ、私はそれを行います。(もちろん、5.xxx や 7.xxx などの主要なバージョン変更のために別のモジュールを作成しなければならないことは問題ありません)

前もって感謝します!

4

2 に答える 2

5

bin フォルダー内のアセンブリを参照する代わりに、DotNetNuke.dll (およびその他の参照) のコピーをソース コードと共に保持し、そこで参照します。サポートされている最も古いバージョンをそこに置きますが、新しいサイトで開発します。参照にCopy Local=Falseを設定して、新しいバージョンを上書きしないようにします。問題はありません。

このようにして、DNN 6.1.x で動作するモジュールを開発しながら、DNN 4.5.3 を参照できます。私は何年もこの方法を使ってきましたが、大きな問題はありませんでした (時々 Copy Localをオフにするのを忘れて、私の DNN サイトが不可解に爆発する場合を除いて)。

于 2012-04-16T01:22:47.433 に答える
2

DNN からサブクラス化したクラスで DNN のバージョンを決定することに関して。

YourClass が 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 インクルージョン コードに埋め込まれているコードを使用できます: DotNetNuke 5 および 6 での jQuery の使用

于 2012-04-17T05:05:39.097 に答える