3

私はオープンソースプロジェクト(Logbus-ng)に取り組んでおり、WindowsとMonoの両方で機能する方法で、コンソールアプリケーションによって生成されたWebサービスを実装する必要があります。

現在、 MSDN Magazineによるチュートリアルのおかげで、 Windowsでこれを行うことに成功しました。コンソールアプリケーションは、独自のWebサーバーを生成し、実際に外部へのWebサービスインターフェイスを開くことができます。問題は、Monoのバグが原因で、これがMonoでは機能しないことです。

Monoの開発者とチャットして、Mono.XSPアセンブリを使用してコンソールアプリケーションへのASP.NETパイプラインを有効にすることを提案したので、構成に応じてWebサービスアクティベーターのさまざまな実装を使用すると思います。

今私の質問は:Mono.XSPはすべてのMonoディストリビューションのGACで利用可能ですが(つまり、Linuxでxbuildを使用している場合)、誰かがGACにインストールしない限り、Windowsでは利用できません。Monoを出荷したくありません。私のソフトウェアを使用したXSPは、必要がない場合(つまり、Windowsでコンパイルする場合)にMonoをインストールするように強制することもありません。また、MONOコンパイルフラグが有効になっている場合にのみ有効になるGACのMono.XSPアセンブリへの参照を設定できます。 ?このフラグを有効にすると、私のコードは明らかに、上記のリンク先のチュートリアルで説明されているHttpListenLibraryではなくMono.XSPを参照し、その参照はコンパイラーによって正しく使用されます。

前もって感謝します。

4

2 に答える 2

7

MSBuild条件を使用します。

たとえば、プロジェクトに「DebugMono」という構成があるとします。これは通常の「Debug」構成のモノバージョンであり、「Configuration」プロパティ値をチェックする適切な参照アイテム要素に条件属性を配置するだけです。

<Reference Include="Mono.Xsp" Condition="'$(Configuration)'=='DebugMono'" />
于 2010-10-24T08:36:14.880 に答える
2

これが達成できるかどうかはわかりません。ただし、リフレクションを使用してアセンブリを遅延バインディングし、必要なオブジェクトとメソッドのインスタンスを取得することを検討できます。これはあなたにあなたがそれをするだろうという考えを与えます:

// Wrapper class:
public class Listener
{
    public void Start()
    {
        bool useMono = true; // TODO: Get this from config
        if (!useMono)
        {
            // Bind directly to this as it will be available in Mono too
            HttpListener listener = new HttpListener();
            listener.Prefixes.Add("http://localhost:8081/foo/");
            listener.Prefixes.Add("http://127.0.0.1:8081/foo/");
            listener.Start();
        }
        else
        {
            Assembly asm = Assembly.Load("TheNameOfTheAssembly");

            Type type = asm.GetTypes().Where(x => x.Name == "TheType").FirstOrDefault();
            object obj = Activator.CreateInstance(type);
            MethodInfo mi = type.GetMethod("NameOfMethod");
            mi.Invoke(obj, null); // invoke with list of parameters
        }
    }
}

バグが修正されたら、この種の実装を置き換えることができます。

于 2010-10-23T21:53:44.697 に答える