我的项目是资源文件编辑器。它在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. B有一个表格。从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)编译我的资源时,表单会变形。