Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态加载.dll文件后释放.dll和.pdb_C#_Assemblies_Coded Ui Tests_Dynamic Assemblies - Fatal编程技术网

C# 动态加载.dll文件后释放.dll和.pdb

C# 动态加载.dll文件后释放.dll和.pdb,c#,assemblies,coded-ui-tests,dynamic-assemblies,C#,Assemblies,Coded Ui Tests,Dynamic Assemblies,我正在构建一个windows应用程序,我可以通过单击按钮调用编码的UI项目(名为RecordAndPlayback的项目)。我的目标是调用编码UI项目中的测试方法,然后能够修改测试,然后从我的win应用程序中调用它,而不用使用相同的按钮关闭它 我设法调用了测试方法,但在调用之后修改测试方法时遇到了问题。每当我构建编码的UI项目时,都会出现一个错误 错误CSC(0,0):创建调试信息文件“…\obj\debug\RecordAndPlayback.PDB”-”…\obj\debug\RecordA

我正在构建一个windows应用程序,我可以通过单击按钮调用编码的UI项目(名为RecordAndPlayback的项目)。我的目标是调用编码UI项目中的测试方法,然后能够修改测试,然后从我的win应用程序中调用它,而不用使用相同的按钮关闭它

我设法调用了测试方法,但在调用之后修改测试方法时遇到了问题。每当我构建编码的UI项目时,都会出现一个错误

错误CSC(0,0):创建调试信息文件“…\obj\debug\RecordAndPlayback.PDB”-”…\obj\debug\RecordAndPlayback.PDB”时出现意外错误:进程无法访问该文件,因为另一个进程正在使用该文件

我使用
AppDomain
加载其中的dll,然后卸载
AppDomain
,希望dll会被释放。我设法做到了,但随后在.pdb文件中出现了上述错误。我找到了另一个更简单的解决方案,但仍然解决了上述问题

以下是我迄今为止的代码示例:

string dllPath = @"...\bin\Debug\RecordAndPlayback.dll";
byte[] fileContent;
using (FileStream dll = File.OpenRead(dllPath))
{
    fileContent = new byte[dll.Length];
    dll.Read(fileContent, 0, (int)dll.Length);
}
var DLL = Assembly.Load(fileContent);

Playback.Initialize();

foreach (Type type in DLL.GetExportedTypes())
{
    if (type.Name == "CodedUITest1")
    {
        var c = Activator.CreateInstance(type);
        try
        {
            type.InvokeMember("CodedUITestMethod1", BindingFlags.InvokeMethod, null, c, new object[] { });
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        break;
    }
}
Playback.Cleanup();
我尝试使用
AppDomain
,但没有成功。实际上,上面的代码是到目前为止我得到的最好的代码,我确信.dll文件已经发布,因为我可以删除它。此外,bin文件夹中的.pdb文件也被释放(也可以将其删除)。我的问题是obj文件夹中的.pdb文件。唯一的办法是我必须关闭我的windows应用程序项目,这样我才能构建我的编码UI项目


如何在不关闭win应用程序的情况下修复此问题?

我找到了解决问题的方法。我尝试了很多在线发布的解决方案,他们都有相同的问题。.dll文件正在被另一个进程使用,或者.pdb文件正在被另一个进程使用

我上面提到的代码,除了.pdb文件外,其他的都能正常工作,老实说,我没有找到解决方案。所以,我解决了这个问题。我修改了build选项,所以根本不生成.pdb文件

要禁用pdb文件生成,单击“生成”选项卡下部的“高级…”按钮后,需要使用项目属性中可用的“高级生成设置”对话框

将发布版本配置的
Output-Debug info:设置为None
,并且不会生成任何pdb文件


解决了我的问题。虽然它没有真正解决问题,但我删除了导致问题的文件。希望这能帮助其他人使用
AppDomain
的代码在哪里?这将是正确的方法。也许你在这方面做错了什么。我使用了解决方案,并将AppDomain代码放在了DoWork()中方法。我放置的代码就是问题中的代码。