我有一张源自现有表格的表格。现有的形式完美无缺。当我尝试打开新表单时(第一次)我收到设计师的错误:
为防止在加载设计器之前可能丢失数据,必须解决以下错误:
拒绝访问路径'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Logs \ eventlog.dat'。
此文件甚至不存在。如果我看一下调用堆栈就会变得更加奇怪。在派生自的表单的构造函数中,有一个创建日志文件的类。
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at MeterView.MVLogger..ctor() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\MVDataLogger.cs:line 67
at MeterView.MVLogger.get_Instance() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\MVDataLogger.cs:line 79
at MeterView.frmSingle..ctor() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\frmSingle.cs:line 167
这是引用实际上创建目录和日志文件的行代码,但是来自应用程序当前目录。这毫无意义。
为什么会生成关于不存在的文件的警告,为什么它阻止我在设计器中做任何事情?此刻我因此而完全死在水中。
感谢您的任何建议。
答案 0 :(得分:2)
你在这里犯的两个错误。第一个是您没有指定文件的完整路径名。您只需指定“eventlog.dat”即可创建/打开日志文件。如果未将默认工作目录设置在您希望的位置,则会出错。在设计模式中,它肯定没有任何开心。在发运项目后从未设置正确,您无法写入c:\ program files的子目录。您必须使用Environment.GetFolderPath()来选择可以写入的AppData路径。
第二个错误是您允许此代码在设计模式下运行。使用DesignMode属性来防止这种情况发生。
答案 1 :(得分:0)
基于你所拥有的东西进行疯狂猜测,但是知道Visual Studio,这是我的猜测(在评论中不能很好地格式化,所以上帝,请原谅我):
MVDataLogger
类存在问题MVDataLogger
尝试加载/读取/写入名为" Logs \ eventlog.dat" MVDataLogger
在打开文件/目录之前不确保文件/目录存在。我相信修复这些项目可以解决您的问题。
答案 2 :(得分:0)
构造函数中的代码生成错误。尝试评论构造函数的所有自定义代码。如果没有问题,请取消注释行,直到再次出现错误为止。 尽量避免构造函数中的不安全初始化。或者使用:
if(!DesignerProperties.GetIsInDesignMode(this))
{
// do something not dupported in designer
}