在 .Net 3.5 中使用 Ninject 时 System.Core 的 System.Io.FileNotFoundException

Posted

技术标签:

【中文标题】在 .Net 3.5 中使用 Ninject 时 System.Core 的 System.Io.FileNotFoundException【英文标题】:System.Io.FileNotFoundException for System.Core while using Ninject in .Net 3.5 【发布时间】:2015-08-12 19:24:23 【问题描述】:

我正在使用 Ninject (v3.2.2.0) 和基于 .net 3.5 框架构建的工具。这一直很好 - 直到几周前我搁置了开发。

我再次拿起它以准备发布,但它不再正常 - 它仍然可以毫无问题地编译,但现在每当我尝试运行它时都会收到 FileNotFoundException:

发生 System.IO.FileNotFoundException 消息=无法加载文件或程序集 'System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。该系统找不到指定的文件。 来源=忍者 文件名=System.Core,版本=2.0.5.0,文化=中性,PublicKeyToken=7cec85d7bea7798e FusionLog=Assembly manager 加载自:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll 在可执行文件 E:\work\wire\M\Tools\Import\bin\Debug\Import.vshost.exe 下运行 --- 详细的错误日志如下。

=== 预绑定状态信息 ===

日志:用户 = ZOO\TAL 日志:DisplayName = System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e(完全指定) 日志:Appbase = file:///E:/​​work/wire/M/Tools/Import/bin/Debug/ 日志:初始 私有路径 = NULL 调用程序集:Ninject,Version=3.2.0.0,Culture=neutral,PublicKeyToken=c7192dc5380945e7。

LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:E:\work\wire\MR\Tools\Import\bin\Debug\Import.vshost.exe.Config 日志:使用 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config 中的机器配置文件。 日志:政策后参考:System.Core,版本=2.0.5.0,文化=中性,PublicKeyToken=7cec85d7bea7798e 日志:正在尝试下载新的 URL 文件:///E:/​​work/wire/M/Tools/Import/bin/Debug/System.Core.DLL。 日志:正在尝试下载新的 URL 文件:///E:/​​work/wire/M/Tools/Import/bin/Debug/System.Core/System.Core.DLL。 日志:正在尝试下载新的 URL 文件:///E:/​​work/wire/M/Tools/Import/bin/Debug/System.Core.EXE。 日志:正在尝试下载新的 URL 文件:///E:/​​work/wire/M/Tools/Import/bin/Debug/System.Core/System.Core.EXE。

堆栈跟踪: 在 Ninject.Planning.Bindings.BindingConfiguration..ctor() 在 Ninject.Planning.Bindings.Binding..ctor(类型服务) 在 Ninject.Syntax.BindingRoot.BindT 在 Ninject.KernelBase..ctor(IComponentContainer 组件,INinjectSettings 设置,INinjectModule[] 模块) 在 Ninject.StandardKernel..ctor(INinjectModule[] 模块) 在 Import.ImportBootstrapper.Import(String[] xiArgs) 中 e:\work\wire\M\Tools\Import\ImportBootstrapper.cs:line 16 内部异常:

我已将其发挥到极致 - 我目前仅尝试运行以下代码:

using Ninject;

namespace ConsoleApplication1

  class Program
  
    static void Main(string[] args)
    
      new StandardKernel();
    
  

同样,编译得很好,但是一旦我到达new StandardKernal(); 行,它就会中断并出现与上述相同的错误。

它也在源代码控制中,所以我已经将它加载到同事的系统、参考、库、配置和所有东西上,是的,它在他们的机器上运行良好。

为了尝试解决这个问题,我有:

    确保引用的 System.Core 文件存在(确实存在)。

    确保它具有正确的权限。

    确保 GAC 中确实存在 System.Core - 它确实存在,结果如下:

    C:\> gacutil -l | find /i "system.core"
    System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
    System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
    

    在“打开或关闭 Windows 功能”中,删除 .NET Framework 3.5,重新启动,重新安装 .NET 3.5,再次重新启动,尝试运行程序。

    安装了所有可用的 Windows 更新(最初是 .NET 更新,但最终是全部)。

    尝试查找 sfc /scannow 的问题,但没有效果。

    在 App.config 文件中修改了各种 supportRuntime 版本:

    <configuration>
       <startup>
         <supportedRuntime version="v2.0.50727"/>
         <supportedRuntime version="v3.5.30729"/>
       </startup>
    </configuration>
    

(有一个,两个,或者两者都没有,没有明显的区别)

    确保参考文件肯定包含 System.Core (&lt;Reference Include="System.core" /&gt;)。

    确保项目属性明确设置为 .Net 3.5。

    我还查看了 machine.config 和 web.config 文件。没有任何问题,但我不确定我是否能够确定是否有明显错误,所以我不能说这条研究途径已关闭。

我现在完全不知所措。我的意思是,没有得到一台新电脑并从那里开始。

我做错了什么?

【问题讨论】:

只是一个想法:您说的是 .NET 3.5,但日志显示的是版本 2 (v2.0.50727)? 是的 - 到目前为止,我一直假设它指的是运行时版本(表示 CLR 的版本 - 并且 .NET Framework 3.5 仍然使用 CLR 2.0(.50727))。也就是说,我完全有可能错了。如果我错了,我将如何解决它? Visual Studio 肯定认为一切都在使用 .Net 3.5。 你是对的,.NET 3.5 uses CLR v.2.0。 This issue 似乎是相关的,但我猜您已经进行了大量搜索? 是的。可悲的是,这个问题似乎可以通过安装 Microsoft silverlight 解决(这对我没有帮助)。我觉得我的一定是相关的,但他们的解决方案都不是特别相关。 【参考方案1】:

添加网站与新的应用程序池。 我们遇到了同样的问题,并通过在 IIS 中创建新网站和应用程序池来解决。

【讨论】:

以上是关于在 .Net 3.5 中使用 Ninject 时 System.Core 的 System.Io.FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Ninject 中的 .NET Core DI 范围生命周期

在 ASP.NET vNext 中使用 Ninject 时出现编译器错误 CS0246(未找到类型或命名空间)

Ninject之旅之七:Ninject依赖注入

Ninject 在使用 NinjectHttpModule 时创建一个额外的实例

使用 .NET 4.0 还是 .NET 3.5?

MVC3 EF 工作单元 + 通用存储库 + Ninject