1

デスクトップ用の VS2012 .net フレームワーク 4.5 WPF ではなく、通常の Windows フォーム アプリケーション
こんにちは、答えを検索しようとしましたが、正しい用語がわかりません。私は自分のコードを壊すことができましたが、何が間違っていたのか理解できません。(何も変わっていないと思いましたが・・・)

2 つのプロジェクトを含むソリューションがあります。最初のプロジェクトは実行可能プログラムで、2 番目のプロジェクトは実行時に読み込まれ、最初のプロジェクトによって使用される DLL です。

最初のプロジェクトには、フォームと、同じ名前空間に public static 文字列を持つ静的クラスが含まれています。(および他のいくつかの接続されていないクラス)。具体的には:

namespace project1_namespace
{
    static class settings
    {
        public static string some_words = "some words in a string";
    }

    class dll_callback{
         //.. some public methods here
    }

    dll_callback dllcallback; // instance is initialised in the code (not shown)
    Form form; 

    public partial class frm_splash : Form
    {
        private void frm_splash_FormClosing(object sender, FormClosingEventArgs e)
        {
           // this function actually loads the DLL, ensuring its the last step
           //... some error checking code removed for brevity

               Assembly assembly = Assembly.LoadFrom("c:\dllpath\project2.dll");
               Type type_init = assembly.GetType("project2_class");
               object init = Activator.CreateInstance(type_init, form, dllcallback);           

           //... some error checking code removed for brevity
        }// end method
    }// end form class
}// end namespace

フォームが閉じると、上記のメソッドが呼び出され、2 番目のプロジェクト クラス project2_class コンストラクターが呼び出されます。

プロジェクト 2 の DLL には、次のものがあります。

namespace project2_namespace
{
// how did i get this working to reference "settings" class from project 1??
    public class project2_class
    {
        public project2_class(project2_namespace.Form1 form_ref, object callback)
        {
            settings.some_words = "the words have changed";
            //... some more stuff
        }
    }
}

今、私は project2 のまったく別の部分でいくつかのコードを試していましたが、VS2012 が突然コンパイルを拒否し始めました:
エラー CS0103: The name 'settings' does not exist in the current context

これに対する標準的な解決策は、project2 への参照を追加することですが、プロジェクト 1 が 2 を DLL として呼び出すため、循環依存関係が作成されます。

正直なところ、これに関連するものを変更したとは思いませんが、明らかに変更しました。それを見ると、プロジェクト 2 が参照なしでプロジェクト 1 のクラスにアクセスする方法がわかりませんが、project2_class コンストラクターへの引数のリストには含まれていません。変更されていないことは絶対に肯定的です (後方互換性の理由から変更できません)。これを機能させるには多くの作業が必要だったので、これについて本当に助けていただければ幸いです。


余談ですが、ソース管理を使用しないという教訓を確実に学びました。「これが何をするか」のコメントではなく、「これがどのように機能するか」のコメントを作成しないでください。

4

1 に答える 1

1

ダイナミックがあなたを助けるかもしれませんか?コンパイル時に設定文字列を取得することはできません。

于 2013-10-26T08:09:27.993 に答える