OpenNetCF.IoC не может начать работу в SmartClientApplication - PullRequest
2 голосов
/ 06 января 2012

Я использую IoC-инфраструктуру OpenNetCF , и код в моем классе Program выглядит следующим образом:

public class Program : SmartClientApplication<Container>
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [MTAThread]
        static void Main()
        {
            if (!string.Equals(RegionInfo.CurrentRegion.EnglishName, "New Zealand") ||
                !string.Equals(TimeZone.CurrentTimeZone.StandardName, "New Zealand Standard Time"))
            {
                MessageBox.Show("Please set your regional and time zone settings to New Zealand.");
                return;
            }

            AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;

            new Program().Start();
        }

        static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            if (Debugger.IsAttached)
            {
                Debugger.Break();
            }
        }
    }

Я скопировал OpenNETCF в свое решение и ожидал, что при вызове Program (). Start () он перейдет к методу start, поэтому я установил для него точку останова:

public abstract class SmartClientApplication<TShell>
    where TShell : Form
{
    /// <summary>
    /// This method loads the Profile Catalog Modules by calling GetModuleInfoStore which, unless overridden, uses a DefaultModuleInfoStore instance.
    /// It then creates an instance of TShell and calls Application.Run with that instance.
    /// </summary>
    public void Start()
    {
        // load up the profile catalog here
        IModuleInfoStore store = GetModuleInfoStore();

        Start(store);
    }

Странно, он никогда не достигнет точки разрыва.

Мне показалось это странным, поэтому я щелкнул в Программе, чтобы перейти к определению от ссылки наследования до SmartClientApplication.

Это открыло совершенно другой файл, чем я ожидал, и выглядит так:

using OpenNETCF.IoC;
using System;
using System.Windows.Forms;

namespace OpenNETCF.IoC.UI
{
    public abstract class SmartClientApplication<TShell> where TShell : System.Windows.Forms.Form
    {
        protected SmartClientApplication();

        public virtual void AddServices();
        protected virtual void AfterShellCreated();
        public virtual IModuleInfoStore GetModuleInfoStore();
        public virtual void OnApplicationRun(Form form);
        public virtual void OnModuleLoadComplete(string moduleName);
        public void Start();
        public void Start(string profileCatalog);
    }
}

То же имя, но содержимое, похоже, не содержит никакой реализации. Когда я вижу, где его местоположение, это что-то вроде:

C: \ Users \ MyUserName \ AppData \ Local \ Temp \ 7212 $ OpenNETCF.IoC.UI.dll $ v2.0.50727 \ OpenNETCF.IoC.UI.SmartClientApplication.cs

так что это объясняет, почему он не достиг точки останова, но я хочу знать, почему он даже смотрит на этот сумасшедший файл, а не на тот, каким должен быть.

1 Ответ

2 голосов
/ 06 января 2012

Похоже, у вас есть несколько копий источника и PDB на вашей машине для разработки.Если вы создали один из примеров IoC, то скопировали оптовую папку, включая папки obj и bin, в путь вашего приложения. Это может произойти.

Решение (или, по крайней мере, начало) - этовыполните следующие действия:

  • Удалите ссылку (и) IoC из вашего проекта
  • Постройте, чтобы создать ошибку
  • Откройте проводник и удалите все папки obj и bin изваше дерево решений
  • Повторно добавьте ссылку (и)
  • Перестройте
...