FileNotFoundException未处理 - 但文件在那里

时间:2014-09-19 05:54:34

标签: c# wpf mvvm relaycommand

我正在努力解决这个问题。我的WPF应用程序在调试/发布中工作正常。在我发布之后,通过InstallShield Express,我得到一个运行时异常,程序崩溃了。

当程序崩溃时,我可以选择在Visual Studio中调试程序,它会在看起来像

的RelayCommand中断
public class RelayCommand : ICommand
{
    public Action<object> _execute;

    public RelayCommand(Action<object> execute)
    {
        this._execute = execute;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        this._execute(parameter); // where the breakpoint is
    }
}

错误消息是

  

FileNotFoundException未处理
  无法加载文件或程序集&#39; TaskScheduler,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。系统找不到指定的文件

我迷失了为什么会这样。我在页面上有其他命令,它们都按以下方式设置

   public ICommand SaveScheduledTaskCommand { get; set; }
   public ICommand OpenFileCommand { get; set; }

    #region Constructor

    public MyApp()
    {
        OpenFileCommand = new RelayCommand(new Action<object>(OpenFile)));
        ScheduledTaskCommand = new RelayCommand(new Action<object>(SaveScheduledTask));
    }

    #endregion

    private void OpenFile(object o)
    {
        MessageBox.Show("OF"); //works fine
    }    

    private void SaveScheduledTask(object o)
    {
        MessageBox.Show("TS"); //never shows
        TaskScheduler ts = new TaskScheulder();
        //more code
    }    

我猜问题是使用TaskScheduler.dll(基于错误消息),但是.dll存在于已安装的文件夹中(在c:\ Program Files \ Compamy \ MyApp下)...

我不认为这很重要但是,TaskScheduler.dll保存在我的项目之外(它保存在桌面上)但我认为这是不相关的,因为安装程序将获取它的副本并保存它以任何方式到程序Files文件夹?

我使用InstallShield Express来创建安装程序,除此之外,它工作正常。我还有另一个第三方dll,XCeed,这在我的应用程序中工作正常。

我完全迷失了我能做什么,因为我无法看到我如何修复代码!为什么不能使用该应用程序&#34;请参阅&#34; dll?

1 个答案:

答案 0 :(得分:2)

由于包含TaskScheduler,这是因为您缺少包含TaskScheduler.dll引用的程序集。

调试步骤1
检查TaskScheduler.dll的依赖关系,并确保在安装包中包含所有依赖项(框架程序集除外)。

调试步骤2
如果您无法检查TaskScheduler.dll的依赖关系,请遵循本指南How to enable assembly bind failure logging (Fusion) in .NET,找出缺少的程序集。