c# - Visual Studio 删除需要调试的文件

标签 c# visual-studio-2010

我开始遇到一个关于调试我的程序的小问题。它会开始显示没有错误,然后我会按调试来测试它。它会给我一个错误说 “无法复制文件“obj\x86\Debug[programName].exe”,因为找不到。” 我已经开始篡改各种东西,并得出结论,这是我用来通过导入 dll 读取 ini 文件的类。该类中最有可能的两行是:

[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

为了对此进行测试,我从项目中删除了类和所有引用,它会成功构建项目。然后,我可以查看路径并找到之前丢失的可执行文件。认为问题已解决,我将类(class)放回原处,正如您所料,它因同样的错误而中断。它实际上在构建之前删除了可执行文件,所以在我看来,很明显为什么找不到它。

然而,不太明显的部分是:直到今天早上,该程序一直在构建和执行其中的此类,而没有对其执行任何更改。此外,该类在我的 Unity3D 游戏中完美运行,它正在读取此 c# 程序创建的 ini 文件。

谁能告诉我为什么会这样,是否有解决办法?我已经尝试创建一个新项目并重新导入所有内容,但它产生了相同的错误。

编辑

注释和取消注释每一行后,我发现这里的三个注释行导致了问题:

public bool SaveToIni()
    {
        IniFile file = new IniFile("/LoadUpSettings.ini");
        try
        {
            file.IniWriteValue("Screen", "Screen Height", cbbScreenHeight.SelectedItem.ToString());
            file.IniWriteValue("Screen", "Screen Width", cbbScreenWidth.SelectedItem.ToString());
            //file.IniWriteValue("Controllers", "Razer Hydra", ckbRazerHydra.Checked.ToString());
            //file.IniWriteValue("Controllers", "Oculus Rift", ckbOculusRift.Checked.ToString());
            //file.IniWriteValue("Screen", "Fullscreen", ckbFullscreen.Checked.ToString());
            return true;
        }
        catch
        {
            MessageBox.Show("Please fill out all values");
            return false;
        }
    }

这是 IniFile 类中的 IniWriteValue 函数。

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
public string IniReadValue(string Section, string Key)
{
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path);
    return temp.ToString();
}

奇怪的是,如果我删除 ckbRazerHydra.Checked.ToString(),并放入标准字符串(如“True”),它仍然不起作用,尽管这 3 行已被注释掉,但项目已完全构建。

编辑 我设法在一定程度上解决了这个问题。我只需要在发布版本中运行我的程序。如果我在 Debug模式下运行它,我总是会收到错误消息,指出无法复制 exe,因为找不到它。然而,Release 模式似乎几乎总是有效。

最佳答案

bin 和 obj 文件夹仅用于输出。当您告诉 Visual Studio 执行清理或重建时,它会删除这些文件夹中的所有文件。您可以随时安全地删除这些文件夹,在此过程中您不应丢失任何内容。

您永远不会在这些文件夹中放置任何文件。如果您想将外部程序集(EXE 或 DLL)添加到您的项目中,您应该使用项目上的添加->现有项命令将其添加到您的项目中。然后您可以告诉您的项目引用该文件,它将使用本地相对路径。

例如,如果您在项目根目录中创建一个“lib”文件夹并将 some.dll 放入其中,然后您可以添加对位于项目中的文件的引用,它将使用相对路径 ..\lib\some.dll.

关于c# - Visual Studio 删除需要调试的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038060/

相关文章:

c# - DataTypeAttribute 验证是否在 MVC2 中工作?

c# - C#有解析多层级联JSON的库吗?

c# - App.Exit 不立即退出?

c++ - Visual Studio 10 : Saxxmlreader undeclared on my Windows 10

c# - C# 2008 中的元组错误

c# - 将方法调用序列化为 JSON,然后反序列化并调用该方法

c# - 如何在 C# 中使用 where 条件从一个 DataTable 到另一个 DataTable 选择列

c# - Visual Studio : How to "Copy to Output Directory" without copying the folder structure?

c++ - LibVLC 的新手 - 在 VS2010 上试用 libVLC

c# - 无法添加 System.Web.dll 引用