我有一个我试图部署到Azure VM的控制台应用程序(Windows Server 2012R2(。控制台应用程序创建了发送给它的CSHARP编译器实例和处理C#脚本。
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters options = new CompilerParameters();
options.ReferencedAssemblies.Add("System.Data.dll");
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("System.Xml.Linq.dll");
options.ReferencedAssemblies.Add("System.Linq.dll");
options.ReferencedAssemblies.Add("System.Core.dll");
options.ReferencedAssemblies.Add("Newtonsoft.Json.dll");
控制台应用程序按照我的开发机器的意图运行。但是,当我尝试部署它然后在目标服务器上运行时,我会收到以下错误。
Metadata file 'Newtonsoft.Json.dll' could not be found
现在,我的应用程序的调试文件夹中存在组件Newtonsoft.Json.dll
,并使用应用程序使用的所有其他组件。似乎找不到它。我什至尝试了将Newtonsoft.Json.dll
安装到目标服务器上的GAC中,但结果相同。当我尝试硬编码汇编路径时
options.ReferencedAssemblies.Add("@"C:MyAppdebugNewtonsoft.Json.dll");
我得到access denied
错误。我已经尝试了我能想到的一切,但无法弄清楚应用程序为什么找不到集会。
注意:
- 我通过将整个调试文件夹复制到目标服务器来部署此应用程序。可执行文件和组件位于同一目录中。
- 目标服务器没有Visual Studio或安装在其上的任何工具。
- 我在我的开发机上的控制台应用程序项目中安装了JSON.NET
nuget
软件包。
我找到了有效的解决方案。在我的目标计算机上,我将Newtonsoft.Json.dll
复制到windowssystem32
目录(在我的计算机上是C:windowssystem32
(,并通过应用程序找到。
我不确定为什么在GAC中加载组件在此解决方案上不起作用。