获取“源文件与构建模块时不同。”当我刚刚建造它时
Posted
技术标签:
【中文标题】获取“源文件与构建模块时不同。”当我刚刚建造它时【英文标题】:Getting 'The source file is different from when the module was built.' when I just built it 【发布时间】:2012-12-26 22:32:56 【问题描述】:这周我每天都在寻找有关我在尝试调试 ASP.NET 应用程序时遇到的这个问题的信息。 我已经在 the source file is different from when the module was built 和 Getting “The source file is different from when the module was built.” 寻求帮助,但没有得到任何帮助。
我有一个解决方案,其中包含一个项目,该项目具有对从另一个项目中生成的库的 DLL 引用,该库包含许多不同的项目。
我的网络应用程序使用第一个项目的源代码,因此我将调试器附加到它并在代码中设置断点运行网络应用程序。
在使用该应用程序时,我尝试从引用的 DLL 中单步执行代码,它告诉我“源文件与构建模块时不同。”
我尝试从两个解决方案中删除 bin 和 obj 文件夹并重建 dll,然后在第一个项目中删除并重新添加对 dll 的引用。我不明白为什么当我只是构建它并添加参考时它会告诉我源文件与构建模块时不同。
我认为我忽略了一些简单的事情,但我不知道还有什么可以尝试的。 以前有没有其他人解决过这样的情况?
编辑:我刚刚尝试从实际构建我正在使用的 DLL 的项目中附加源代码,即使它与调试器停止的位置也没有正确对齐我的代码。我似乎无法找到一种方法来查找调试器正在使用的 DLL 的位置,但它肯定不是我正在构建的。
编辑 2: 我设法发现“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET”中有旧 DLL 的副本文件”,但每次我运行该应用程序时,它都会重新创建该文件夹和文件结构,就像以前一样。所以我制作了一个批处理文件,每次编译我的项目时都会运行它,同时将新的 DLL 复制到 DNN bin 文件夹中。
【问题讨论】:
有没有可能是这篇文章的副本:***.com/questions/353421/… ? @JonPeterson 你有没有注意到我自己链接到了那个问题,并且我已经说过我已经检查了这个问题的解决方案。 这个DLL是否包含数据库访问代码? @Flot2011 我相信它可以。我至少创建了与数据库的连接。 您是否仔细检查过 IIS 中的虚拟目录确实指向您正在构建代码的位置?例如,您的虚拟目录是否指向 C:\inetpub\wwwroot\myapp,但您的项目现在位于 C:\development\myapp? 【参考方案1】:您使用的是 iis 还是集成的 Web 开发服务器?只是在这里猜测,但您的网络服务器可能仍在使用您的 dll 的旧副本,因此请在重建项目后尝试重新启动它。
我目前无法访问 VS,但如果我没记错的话,当您在 VS 中点击运行按钮时,输出窗口包含所有加载的 dll 的路径。检查那里,看看你是否确实加载了正确的模块。
希望对你有帮助
编辑:另外,记得复制 pdb 文件!由于您引用的是 dll,因此 bin 文件夹中该 dll 的 pdb 文件很可能与您刚刚构建的版本不同步。
【讨论】:
我使用 IIS 进行托管,并使用 DotNetNuke 作为我的 CMS。所以我不是直接从 VS 运行它,而是从 IIS 浏览到网站。我会看看它是否仍然像我附加到工作进程时提到的那样加载路径。 我想我应该将您的帖子标记为答案。您对 VS 中当前加载的 DLL 的了解让我找到了这个答案***.com/a/3454411/1804496。而且我能够准确地看到 DLL 是从哪里加载的。感谢您的帮助!【参考方案2】:我想我明白了为什么 IIS 和 VS 使用的是旧版本的 DLL。这是因为我在 DotNetNuke bin 文件夹中还有一个旧版本。一旦我将新的 DLL 从构建项目复制到 DNN bin 中,我就能够很好地单步执行代码。出于某种原因,我从没想过实际检查那里。
【讨论】:
这清除了它msdn.microsoft.com/en-us/library/ms366723.aspx ASP.net 从我的 DotNetNuke bin 文件夹中获取 DLL,我没有检查以上是关于获取“源文件与构建模块时不同。”当我刚刚建造它时的主要内容,如果未能解决你的问题,请参考以下文章
Requirejs:当我尝试通过requirejs获取它时,函数未定义