Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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# 将DLLImport与IIS/IIS Express相对路径一起使用_C#_Visual Studio_Model View Controller_Dll_Iis 7 - Fatal编程技术网

C# 将DLLImport与IIS/IIS Express相对路径一起使用

C# 将DLLImport与IIS/IIS Express相对路径一起使用,c#,visual-studio,model-view-controller,dll,iis-7,C#,Visual Studio,Model View Controller,Dll,Iis 7,我有一个包含各种项目的VS2013解决方案。主要应用程序是一个MVC网站,其他项目都是为组织分离的支持功能。MVC项目引用这些其他项目中的每一个,其中一个项目特别引用使用DLLImport的第三方DLL。到目前为止,已经定义了一个静态路径,我们部署到的任何服务器都必须有一个包含该DLL的文件夹 [DllImport("C:\hiding.dll")] 我希望对其进行优化,以便在发布期间在项目的\bin文件夹中只包含“hiding.dll”,但当我尝试指定相对路径时,DllImport失败。我的

我有一个包含各种项目的VS2013解决方案。主要应用程序是一个MVC网站,其他项目都是为组织分离的支持功能。MVC项目引用这些其他项目中的每一个,其中一个项目特别引用使用DLLImport的第三方DLL。到目前为止,已经定义了一个静态路径,我们部署到的任何服务器都必须有一个包含该DLL的文件夹

[DllImport("C:\hiding.dll")]
我希望对其进行优化,以便在发布期间在项目的\bin文件夹中只包含“hiding.dll”,但当我尝试指定相对路径时,DllImport失败。我的猜测是,我期望相对路径与实际情况有所不同。使用IIS Express进行调试和使用IIS进行生产将产生相同的结果,“无法加载DLL”

我不太了解IIS Express调试模式下的路径,但在生产环境中,这就是文件夹的外观

C:\inetpub\wwwroot\hiding.dll (this is where VS2013 publish puts it which I know is wrong)
C:\inetpub\wwwroot\bin\hiding.dll (so I copied it here)
C:\inetpub\wwwroot\bin\iReferenceHiding.dll 
iReferenceHiding.dll执行它所说的操作。从解决方案的一个项目编译的DLL实际执行DLLImport调用

我发现了大量关于DLL在运行时存储在何处的信息,所有信息似乎都指向\bin是应该检查的第一个文件夹。我的问题最终归结为“我如何在我的VS2013 MVC应用程序中包含此第三方DLL,那么当我将其发布到IIS(甚至使用IIS Express进行调试)时,会发现该DLL?”(绝对路径的工作方式类似于champ)

我感谢大家的时间

更新

生产中的IIS正在从路径“C:\Windows\SysWOW64\inetsrv”中提取。因此,只要在这里复制DLL,相对路径就可以工作。我不知道为什么它不先检查\bin文件夹。我唯一的猜测是,对于IIS,这是从中加载应用程序的位置,而不是IIS inetpub目录

IIS Express(调试时)从“C:\Program Files(x86)\IIS Express”加载,但将dll放在此处没有帮助。我不知道这是从哪里加载的


此时,将DLL移动到静态位置并使用绝对路径是我唯一的选择,这看起来像是一个生成后事件。

作为旁注,您的绝对路径将不起作用,因为您使用的是未缩放的反斜杠。您必须使用
“C:\\higing.dll”
@“C:\higing.dll
(逐字字符串)。您有“复制到输出目录”吗“解决方案资源管理器中DLL文件的属性集?或者,如果您不想在项目中使用该文件,可以在项目属性页中将复制操作设置为自定义生成后步骤。@Dai-在您的第一个注意事项中,我刚刚手动键入了该行,但未能转义字符。在代码中,我将对它们进行转义。@Dai对于您的第二个问题,我设置了“如果更新,则复制”选项。它实际上是复制到bin文件夹上方的一个目录中,但现在这只是一个小小的不便。更大的问题是把DLL放到相对路径的位置。顺便说一句,你的绝对路径不起作用,因为你使用的是未设置反斜杠。您必须使用
“C:\\higing.dll”
@“C:\higing.dll
(逐字字符串)。您有“复制到输出目录”吗“解决方案资源管理器中DLL文件的属性集?或者,如果您不想在项目中使用该文件,可以在项目属性页中将复制操作设置为自定义生成后步骤。@Dai-在您的第一个注意事项中,我刚刚手动键入了该行,但未能转义字符。在代码中,我将对它们进行转义。@Dai对于您的第二个问题,我设置了“如果更新,则复制”选项。它实际上是复制到bin文件夹上方的一个目录中,但现在这只是一个小小的不便。更大的问题是将DLL放到相对路径的位置。