デスクトップ用の 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 コンストラクターへの引数のリストには含まれていません。変更されていないことは絶対に肯定的です (後方互換性の理由から変更できません)。これを機能させるには多くの作業が必要だったので、これについて本当に助けていただければ幸いです。
余談ですが、ソース管理を使用しないという教訓を確実に学びました。「これが何をするか」のコメントではなく、「これがどのように機能するか」のコメントを作成しないでください。