Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CSharpProvider运行时编译找不到DLL_C#_Entity Framework_Exception Handling_Assembly References_Csharpcodeprovider - Fatal编程技术网

C# CSharpProvider运行时编译找不到DLL

C# CSharpProvider运行时编译找不到DLL,c#,entity-framework,exception-handling,assembly-references,csharpcodeprovider,C#,Entity Framework,Exception Handling,Assembly References,Csharpcodeprovider,我正在使用CSharpCodeProvider在运行时编译DLL。我的代码在某些计算机上运行正常,但在其他计算机上运行失败,出现以下错误: 错误CS0006:找不到元数据文件“EntityFramework.dll” 以下是一段代码片段: var csFile = ... // the file is in C:\Program Data\MyFolder\InnerFolder using (var provider = new CSharpCodeProvider()) { var

我正在使用CSharpCodeProvider在运行时编译DLL。我的代码在某些计算机上运行正常,但在其他计算机上运行失败,出现以下错误:

错误CS0006:找不到元数据文件“EntityFramework.dll”

以下是一段代码片段:

var csFile = ... // the file is in C:\Program Data\MyFolder\InnerFolder
using (var provider = new CSharpCodeProvider())
{
    var parameters = new CompilerParameters
    {
        GenerateInMemory = false, // we want the dll saved to disk
        GenerateExecutable = false,
        CompilerOptions = "/target:library",

        // the assembly is compiled to the same directory as the .cs file
        OutputAssembly = GetNewCacheAssemblyPath(),
    };

    parameters.ReferencedAssemblies.AddRange(new[]
        {
            "System.dll", 
            "System.Data.dll", 
            "System.Data.Entity.dll", 
            "EntityFramework.dll",
        });

    var compilerResult = provider.CompileAssemblyFromFile(parameters, csFile);
}

有没有想过为什么会发生这种情况?

EntityFramework不是.NET framework的一部分。因此,一个简单的解释是,这台发生故障的机器没有安装它。你应该自己部署它。当您使用Nuget包时,您将在bin\Release目录中拥有DLL的副本。别忘了将其与您的传送二进制文件一起包含


下一个失败模式是您确实部署了它,但程序的工作目录不是您希望的位置。提供程序集的完整路径名以避免此问题。例如,您可以使用Assembly.GetEntryAssembly().Location来查找EXE的路径。

EntityFramework不是.NET framework的一部分。因此,一个简单的解释是,这台发生故障的机器没有安装它。你应该自己部署它。当您使用Nuget包时,您将在bin\Release目录中拥有DLL的副本。别忘了将其与您的传送二进制文件一起包含


下一个失败模式是您确实部署了它,但程序的工作目录不是您希望的位置。提供程序集的完整路径名以避免此问题。例如,您可以使用Assembly.GetEntryAssembly().Location来查找EXE的路径。

您提到的代码在某些文件上有效,但在其他文件上无效,它清楚地正确加载所有标准
系统
文件,因为它们在
EntityFramework.dll
之前排序,很明显,您的代码本身通常是正常的,因为这些标准库没有崩溃


很明显,它正在失败的机器没有安装实体框架,这是有道理的,因为它不是.NET本机框架的一部分。它是一个附加组件。

您提到的代码在某些系统上有效,但在其他系统上无效,它显然正确加载了所有标准的
系统
文件,因为它们在
EntityFramework.dll
之前排序,而且很明显,您的代码本身通常是正常的,因为这些标准库没有崩溃


很明显,它正在失败的机器没有安装实体框架,这是有道理的,因为它不是.NET本机框架的一部分。它是一个附加组件。

所有机器都安装了Entity framework吗?如果没有,您可能需要在其上安装或部署.Net framework 4manually@Amitd:确定情况是否如此的最简单方法是什么?据我所知,所有这些机器都安装了.NET4。这些是开发人员机器,我们的应用程序(正在开发中使用EF…)在此页面上获取EF更多信息。。可能有版本差异。。没有线索。。还可以尝试复制输出文件夹中的DLL,如Hans saiddo所有机器都安装了Entity framework吗?如果没有,您可能需要在其上安装或部署.Net framework 4manually@Amitd:确定情况是否如此的最简单方法是什么?据我所知,所有这些机器都安装了.NET4。这些是开发人员机器,我们的应用程序(正在开发中使用EF…)在此页面上获取EF更多信息。。可能有版本差异。。没有线索。。也可以尝试复制输出文件夹中的DLL,如Hans所说,工作目录出现问题。我使用反射查找当前应用程序使用的EF DLL的路径,然后使用“/lib”编译器选项指定路径。工作目录出现问题。我使用反射查找当前应用程序使用的EF DLL的路径,然后使用“/lib”编译器选项指定路径。