【问题标题】:Could not load file or assembly 'EntityFramework' when starting a process with UseShellExecute = False使用 UseShellExecute = False 启动进程时无法加载文件或程序集“EntityFramework”
【发布时间】:2016-11-02 17:26:28
【问题描述】:

当我从 asp.net 应用程序启动控制台应用程序并设置 UseShellExecute = False 时,我收到错误:

未处理的异常:System.IO.FileLoadException:无法加载 文件或程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。一个 尝试引用不存在的令牌。 (例外 来自 HRESULT:0x800703F0)

但是当我使用 UseShellExecute = True 启动它时,它可以工作。 asp.net 和控制台应用程序都使用 .net 4.6.1。 EntityFramework.dll 和 EntityFramework.SqlServer.dll 与控制台应用程序位于同一文件夹中。

我已经尝试了所有方法,但到目前为止无法摆脱错误。我更喜欢 UseShellExecute = False 以便我可以将输出重定向到 asp.net 应用程序。它似乎找不到 dll,但它应该是因为它是同一个文件夹。

这是我正在使用的代码示例:

     Dim filename As String = "C:\apps\test.exe"
        Dim filepath As String = Path.GetDirectoryName(filename)


        Dim proc = New Process() With {
        .StartInfo = New ProcessStartInfo() With {
        .FileName = filename,
        .WorkingDirectory = filepath,
        .UseShellExecute = False,
        .RedirectStandardOutput = True,
        .RedirectStandardError = True,
        .CreateNoWindow = True
        }
   }

【问题讨论】:

  • 为什么要从 Web 应用程序内部启动可执行文件?这是一个非常严重的性能和安全问题。这意味着多个进程可以仅仅因为页面刷新而启动,并且任何可以破解该网站的人都可以运行他想要的任何可执行文件
  • 如果你想从一个网站运行一个长时间运行的工作,使用 Hangfire 之类的东西
  • 感谢您提供的信息,但对于我的情况来说,Hangfire 似乎有点矫枉过正。这是一个内部网络应用程序,所以我们不担心黑客攻击。控制台应用程序大约需要 20-30 才能完成,而且他们每周只运行大约 1 次。我将对此进行调查,作为另一种选择。
  • 即 20-30 秒。

标签: asp.net vb.net entity-framework


【解决方案1】:

经过多次调试,这似乎是一个权限问题。我以前不认为这是一个问题,因为 asp.net 正在使用带有模拟的 Windows 身份验证,并且用户 ID 在机器上具有管理员权限。但我想这与应用程序池身份有关。如果我将其更改为具有更高权限的用户帐户,则上述代码有效。我确实在其他地方读过,如果您将 .Domain、.User、.Password 属性添加到上述代码中,除非应用程序池标识是同一用户,否则它仍然不起作用。所以我想我只是忘记了重定向输出而只是使用 UseShellExecute = True 来代替。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多