发布和调试版本System.IO.FileNotFoundException

本文关键字:System IO FileNotFoundException 版本 调试 | 更新日期: 2023-09-27 18:14:42

我有一个非常奇怪的问题,在VS 2010中我能够完美地运行我的应用程序。但是当我构建它或释放它并运行'.exe'时,我得到以下错误:

System.IO.FileNotFoundException: Could not load file or assembly [my assembly] or one of its dependencies, Version=1.0.0.0, Culture=nl-NL, PublicKeyToken=null .....
  • 我检查了发布管理和构建顺序,一切正常。
  • 我检查了'Copy local'选项,它是'True'。
  • 清洁我的解决方案
  • 引用来自解决方案内的不同项目,并通过"项目引用"添加。
  • Environment.CurrentDirectory与。exe位置相同。

我迷路了。

发布和调试版本System.IO.FileNotFoundException

无法加载…版本=1.0.0.0,文化=nl-NL, PublicKeyToken=null

这个程序集引用非常错误,文化属性不正确。CLR在试图找到这样一个程序集时会非常暴躁。包含代码的程序集必须具有中立的区域性属性Culture=neutral。只有包含本地化资源的附属程序集才具有区域性集。它们的加载方式不同,由ResourceManager发出一个显式的Assembly.LoadFrom()调用。

不确定你是如何在Visual Studio中避免这个问题的。我猜这与主机托管过程有关。你可以试着禁用它来重现问题,项目+属性,调试选项卡。

我不知道你是如何把属性设置为"nl-NL"的,在我所知道的IDE中当然没有任何方法可以做到这一点。您可以在AssemblyInfo.cs文件中写入[assembly:AssemblyCulture]属性,但是当您这样做时,构建系统会大声抱怨。无论如何,你必须把它带回neutral来解决你的问题。一般来说,Fuslogvw.exe实用程序显示程序集解析问题。

看来你的方向是对的。当你运行应用程序时,其中一个引用的程序集丢失了。当程序集不在GAC中时,本地复制很重要。在这些相关程序集的引用项目中可能没有设置"copy local"属性-您应该在那里检查丢失的程序集。

当你在VS中运行应用程序时,它会基于你的激活配置(调试或发布)运行。你选了哪一个?默认为Debug。

如果你在构建应用程序时使用Debug配置,.exe将被编译到bin/Debug/文件夹中。这就是你运行它的出发点,它不起作用吗?

当你发布应用程序时,你需要确保你复制了{appname}.exe文件(和{appname}.exe文件)。PDB文件(用于调试信息),在输出文件夹中找到的所有.dll文件和{appname}.exe。配置文件。作为旁注-您可以跳过{appname}.vshost.exe和那些相关文件,因为它们不需要。