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



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

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

错误 CSC(0,0(: 创建调试信息文件"...\obj\调试\记录和播放.PDB"-- "...\obj\调试\记录和播放.pdb时出错:进程无法访问该文件,因为它正由另一个进程使用。

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

这是我到目前为止的代码示例:

string dllPath = @"...binDebugRecordAndPlayback.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文件之外都可以工作,老实说我没有找到解决方案。所以,我解决了这个问题。我修改了构建选项,因此根本不生成.pdb文件。

为了禁用 pdb 文件生成,您需要在单击位于"构建"选项卡下部的""Advanced...""按钮后,使用项目属性中可用的"Advanced build settings"对话框。

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

解决了我的问题。虽然它并没有真正修复它,但我删除了导致问题的文件。希望这对其他人有所帮助

相关内容

  • 没有找到相关文章

最新更新