我正在使用以下代码来动态编译一些代码,并将生成的DLL存储在Azure存储中。
当我在本地运行时,一切正常,但是在使用Azure部署的版本时,则无法正常工作。
我现在已经尝试了很多东西。
这是我正在使用的最新版本。这不会引发任何错误,但是不会存储DLL(存储方法在其他很多地方都可以正常使用)。我认为权限存在问题,或者DLL没有作为文件存储。
public Tuple<bool,string> compileAndStoreCodeAsDLL(Guid actionID, string actionName, string actionMethod, string code)
{
string newFileName = "AncillaryTestMethods_" + actionName + ".dll";
try
{
// Compile the code
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = newFileName;
parameters.GenerateInMemory = false;
parameters.TempFiles = new TempFileCollection(".", true);
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, code);
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, results.CompiledAssembly);
// Store the code in the current firm's azure directory/ActionDLLs
this.putFile(stream, newFileName, "ActionDLLs");
// Return ok
return new Tuple<bool, string>(true, null);
}
catch (Exception e)
{
// Return fail
return new Tuple<bool, string>(true, e.Message);
}
}
我从以下代码开始(在本地也可以使用):
public Tuple<bool,string> compileAndStoreCodeAsDLL(Guid actionID, string actionName, string actionMethod, string code)
{
string newFileName = "AncillaryTestMethods_" + actionName + ".dll";
try
{
// Compile the code
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = newFileName;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, code);
// Store the code in the current firm's azure directory/ActionDLLs
this.putFile(results.CompiledAssembly.GetFile(newFileName), newFileName, "ActionDLLs");
// Return ok
return new Tuple<bool, string>(true, null);
}
catch (Exception e)
{
// Return fail
return new Tuple<bool, string>(true, e.Message);
}
}
但是在Azure上引发了一个错误“错误生成Win32资源:拒绝访问。无法删除用于默认Win32资源的临时文件'd:windows \ system32 \ inetsrv ... tmp”-系统找不到指定的文件。
大概与Azure权限有关,因此我尝试了上面的代码。
任何人都可以提出任何建议以使此功能在Azure中正常工作吗?
经过大约17个小时的工作之后,我终于开始工作了。情况是如此的糟糕,以至于我什至尝试连接到FluidSharp库中的Roslyn类,但是它们都有自己的主要问题。
这里有三个核心问题:
The solutions were:
Hope this saves someone else a load of hassle!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句