当不使用调试器运行C#应用程序时,出现访问冲突异常

4
我有一个在Visual Studios 2008中运行良好的应用程序,我正在尝试将其转移到VS 2010以使用.NET 4,并且我遇到了一个非常奇怪的问题。当我从Release模式或Debug模式下带调试器运行代码(F5)时,运行程序没有任何问题。然而,当我从Release或Debug模式下不带调试器运行程序(Shift + F5)时,在尝试运行GDCM库中的一些代码时,会出现访问冲突异常。我通过使用CMake和Swig创建了这些dll,并按照此处的说明进行了调整,以便为VS 2010和.NET 4构建。

有没有人有任何想法,为什么会出现这种情况,以及如何解决它?

以下是一个出现错误的程序示例。同样,如果您在VS 2010中创建一个具有以下程序的项目,并附加调试器,则可以正常运行,如果不附加调试器,则会失败。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using gdcm;

namespace GDCMVS2010Test
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("This program prints the patient name of a dicom file with gdcm");
                Console.WriteLine("Usage: [input.dcm]");
                return;
            }

            gdcm.Reader reader = new gdcm.Reader();
            reader.SetFileName(args[0]);
            reader.Read();

            gdcm.File file = reader.GetFile();

            gdcm.StringFilter filter = new gdcm.StringFilter();
            filter.SetFile(file);
            string value = filter.ToString(new gdcm.Tag(0x0010, 0x0010));

            Console.WriteLine("Patient Name: " + value);
        }
    }
}

你能发布可复现的代码吗?首先要检查的是传递无效数据和p/Invoke签名。 - Stephen Cleary
每次我访问DLL中的任何方法时,都会出现这个问题。我已经发布了一些非常简单的示例代码。 - Jon
我不知道如何发布代码以便进行复制,因为这需要整个带有适当的GDCM dlls的VS解决方案。 - Jon
4个回答

1

1

1
这是因为我使用的 SWIG 版本无法正常工作。最近发布了新版本的 SWIG(版本 2.0),可以解决此问题。在我重新运行 GDCM 上的 CMake,然后使用 VS 2010 重新构建 GDCM 并将 GDCM dlls 放回我的示例代码后,一切都正常工作了。

0

请检查您的项目属性。当我将目标框架设置为.NET Framework 4.0客户端配置文件时,我遇到了这个问题,而实际上应该是没有客户端配置文件的那个。或者反过来。


我有多个项目,每个项目都设置为.NET 4框架。 我尝试将它们全部设置为.NET 4客户端配置文件,但问题仍然出现。这两个框架之间有何区别? - Jon
唉,我无法回答那个问题 - 这是我一直想进一步探索的东西。但我遇到过类似的行为,然后就像“WTF?”。通过将它们全部设置为一个或另一个配置文件,最终使所有东西都能正常工作而没有访问冲突异常。哈哈 - 典型的意外编程案例。 - Steve Elmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接