我正在努力解决这个问题。我的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?
答案 0 :(得分:2)
由于包含TaskScheduler,这是因为您缺少包含TaskScheduler.dll引用的程序集。
调试步骤1
检查TaskScheduler.dll的依赖关系,并确保在安装包中包含所有依赖项(框架程序集除外)。
调试步骤2
如果您无法检查TaskScheduler.dll的依赖关系,请遵循本指南How to enable assembly bind failure logging (Fusion) in .NET,找出缺少的程序集。