私のプロジェクトはリソース ファイル エディターです。appdomain にアセンブリを読み込み、そこからすべての .resources ファイルを作成します。次に、Resgen.exe を使用して、これらの .resources ファイルを .resx ファイルに変更します。
.resx ファイルが作成されると、Windows フォーム デザイナーが呼び出され、.resx ファイルからフォームが作成されます。次に、ユーザーはそれらのフォームを変更できます。次に、それらは al.exe (アセンブリ リンカ) で dll にコンパイルされます。
ある意味では、Visual Studio をインストールしなくても使用できるカスタム Visual Studio デザイナーのようなものです。
My problem is that when the designer try to draw a form that inherited from a
base form that is in another project, it put all the components in the upper left
corner of the form.
/---------------------------------------------------------------- --------------------------------------------/
例を挙げて説明します:
A と B の 2 つのプロジェクトがあります。B にはフォームがあります。A は B から自分のフォームを継承しました。プロジェクト A のアセンブリをロードすると、デザイナーはプロジェクト B から基本フォームを見つけることができず、フォームを正しく作成できません。
通常のフォームは次のように宣言されます。
public class AboutForm : System.Windows.Forms.Form
プロジェクト A のフォームは次のように宣言されます。
public class ExtractForm : AlexandriaR2P.UI.BaseExtractForm
AlexandriaR2P.UI.dll が私のプロジェクト B の場所
/---------------------------------------------------------------- --------------------------------------------/
/---------------------------------------------------------------- --------------------------------------------/
リフレクションによってアセンブリからリソース ファイルを作成しています。アセンブリがフォームの別のプロジェクトへの参照を持たない場合、すべて正常に機能します。
しかし、アセンブリが別のアセンブリに依存してフォームを作成している場合、正しく読み込まれません。すべてのコンポーネントが左上隅にロードされます。(継承された形式)
resx ファイルで、私はこれを見つけました:
<data name=">>m_SendControl.Type" xml:space="preserve">
<value>AlexandriaR2P.UI.BaseSendControl, AlexandriaR2P.UI, Version=5.2.0.13, Culture=neutral, PublicKeyToken=null</value>
</data>
ここで、 AlexandriaR2P.UI は私のdll : AlexandriaR2P.UI.dll であり、デザイナーが正しくロードできず、フォームがうまく描画されていないと思います。
dll のすべてのリソース ファイルが同じフォルダーにあり、参照されているアセンブリが AppDomain に読み込まれていることを確認しましたが、それでも問題が発生します。
ありがとう!
フォームを作成するときにデザイナーから返されるエラーはありません... 必要な情報が見つからないため、コンポーネントを 0,0 にロードするだけです。
また、リソースを al.exe (AssemblyLinker) でコンパイルすると、フォームがすべて変形します。