none
Problema com o formulário herdado RRS feed

  • Pergunta

  • Bom dia pessoal!

    Tenho a seguinte situação problema, tenho uma solution onde existem vários projetos, sendo 1 projeto com formularios base e os demais projetos herdam desse formulário (inherit forms),
    diversas vezes e de modo intermitente os formulários herdados não carregam no modo design gerando um erro de serialization ou could not load assembly file, todavia todas as referencias
    e arquivos estão presentes e bem apontados.
    Hora funciona normalmente hora não sem nenhuma explicação. A maneira que herdo os formulários é via DLL e não via solution, todas as dlls estão na pasta debug\build.

    Ja fiz inumeras tentativas de trocar referencia, pastas, separar os projetos, etc, porém inexplicavelmente o problema ocorre.

    Alguém tem alguma solução ou idéia do que possa ser este problema?


    Aguardo

    segunda-feira, 25 de fevereiro de 2013 13:08

Todas as Respostas

  • Qual a descrição do erro?

    Thiago Coelho - Líder das Comunidades .NET Coders e Windows 8 Brasil
    thiagocoelho.net | @thiagokoelho

    segunda-feira, 25 de fevereiro de 2013 13:31
  • o erro ocorre quando eu abro o formulário em formato de design ele não fica no Erro List. Segue abaixo, um dos erros:

    To prevent possible data loss before loading the designer, the following errors must be resolved:

    Could not load file or assembly 'FormulaCerta.Commons.BLL, Version=1.0.0.16911, Culture=neutral, PublicKeyToken=null' or one of its dependencies. O sistema não pode encontrar o arquivo especificado.

    Instances of this error (1)
    1. Hide Call Stack
    at FormulaCerta.Base.Forms.FormBaseFormulaCerta.FormBaseFormulaCerta_Load(Object sender, EventArgs e)
    at System.EventHandler.Invoke(Object sender, EventArgs e)
    at System.Windows.Forms.Form.OnLoad(EventArgs e)
    at DevExpress.XtraEditors.XtraForm.OnLoad(EventArgs e)
    at System.Windows.Forms.Form.OnCreateControl()
    at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    at System.Windows.Forms.Control.CreateControl()
    at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
    at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
    at System.Windows.Forms.Control.set_Visible(Boolean value)
    at System.Windows.Forms.Design.DesignerFrame.Initialize(Control view)
    at System.Windows.Forms.Design.DocumentDesigner.Initialize(IComponent component)
    at System.Windows.Forms.Design.FormDocumentDesigner.Initialize(IComponent component)
    at System.ComponentModel.Design.DesignerHost.AddToContainerPostProcess(IComponent component, String name, IContainer containerToAddTo)
    at System.ComponentModel.Design.DesignerHost.PerformAdd(IComponent component, String name)
    at System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type componentType, String name)
    at System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)
    at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)
    at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
    at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
    at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
    at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)
      

    segunda-feira, 25 de fevereiro de 2013 13:39
  • Meu pitaco: mesmo que um formulário esteja em design, os código dentro do evento/metodo OnLoad são executados. Considere o seguinte cenário:

    public partial class FormularioPai : Form
    {
    	protected override void OnLoad(EventArgs e)
    	{
    		base.OnLoad(e);
    		//algum código que deveria rodar só em runtime.
    	}
    }

    e

    public partial class FormularioFilho : FormularioPai

    Quando você abre o FormularioFilho no designer (dentro do Visual Studio) o código dentro do OnLoad() do FormularioPai é executado. Aqui os erros podem acontecer, pois o código em questão pode necessitar de alguma dependência não carregada em tempo de design. Uma solução para isso seria identificar que o Form está em design time e não executar um trecho de código:

    public partial class FormularioPai : Form
    {
    	protected override void OnLoad(EventArgs e)
    	{
    		base.OnLoad(e);
    		//verifica se o processo em execução é o Visual Studio.
    		if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
    		{
    			//algum código que rodará só em runtime.    
    		}            
    	}
    }

    Esse é só um método para verificar se está executando em design time. Uma pesquisa rápida na net vai te trazer outras opções se essa não for adquada.


    segunda-feira, 25 de fevereiro de 2013 14:31
  • Vlw Luciano, vou pesquisar sobre.


    Thiago Marthins, você tem alguma sugestão?
    segunda-feira, 25 de fevereiro de 2013 14:39