c#的结果是好的,当我调试,但我得到错误,当我启动.exe文件
本文关键字:错误 启动 exe 文件 调试 结果是 | 更新日期: 2023-09-27 18:16:24
我使用c#, . net 2.0工作。
当我调试我的代码一切工作正常。然而,当我创建exe时,它不是。我添加了一个记录器。下面是我的一段代码:
string[] dllFiles = System.IO.Directory.GetFiles(getAddinDllPath(), "Begin_*.dll");
foreach (string dllFile in dllFiles)
{
Logger.Info("ThisMethod numberX");
if (!dllFile.EndsWith("someString.dll", StringComparison.InvariantCultureIgnoreCase))
{
Assembly assembly = Assembly.LoadFile(dllFile);
foreach (Type type in assembly.GetTypes())
{
Logger.Info("ThisMethod numberY");
...............
getAddinDllPath()方法返回:
addinDllPath = Path.Combine(Path.Combine(myDocuments, "Visual Studio 2005"), "Addins") + "''";
当我调试我的程序时,文本"ThisMethod number Y"在日志文件中多次出现。
当我创建exe并运行它时,日志记录器看起来像这样:ThisMethod numberX在最后。它永远不会出现" thismethodnumbery "。
为什么?
这是我的记录器:
类日志记录器{private static string path = @"C:'Users'John'Documents'Projects'MyLogger.txt";
public static string Path
{
get { return path; }
set { path = value; }
}
public static void Info(string msg)
{
StreamWriter sw = File.AppendText(path);
try
{
string logLine = System.String.Format(
"{0:G}: {1}: {2}", System.DateTime.Now, @"INFO", msg);
sw.WriteLine(logLine);
}
finally
{
sw.Close();
}
}
}
编辑:如果dllFiles为空,则一切正常。但是如果文件在那里,那么问题就出现了。
编辑2:问题在
Type type in assembly.GetTypes()
有人有主意吗?
如果"somePath"
相对于运行目录,则您的exe可能正在扫描另一个目录=>没有找到.dll文件=> "ThisMethod numberY"未被调用。
如果我的猜测是正确的-尝试在somePath
中指定绝对路径。
确保string dllFile in dllFiles
给出正确的dll &以您在代码中提到的字符串结束,并确保日志文件在结束时关闭。你一定会看到的
尽量使用IndexOf >=0
而不是EndsWith("someString.dll"
有时它很烦人2. 可能是在其他程序集中定义或移动的类型之一/查看msdn GetTypes中描述的异常
我应该用
Assembly assembly = Assembly.LoadFrom(dllFile);
代替
Assembly assembly = Assembly.LoadFile(dllFile);