これらのどれも私にとってはうまくいきませんでした。
私のクラス ライブラリは、間違いなく System.Core と Microsoft.CSharp の両方を参照していました。Web アプリケーションは 4.0 で、サポートの問題により 4.5 にアップグレードできませんでした。
Razor Engineを使用して razor テンプレートをコンパイルしているときにエラーが発生しましたが、Web アプリケーションが再起動された後など、断続的にしか発生しませんでした。
私にとってうまくいった解決策は、アセンブリを手動でロードしてから、同じ操作を再試行することでした...
bool retry = true;
while (retry)
{
try
{
string textTemplate = File.ReadAllText(templatePath);
Razor.CompileWithAnonymous(textTemplate, templateFileName);
retry = false;
}
catch (TemplateCompilationException ex)
{
LogTemplateException(templatePath, ex);
retry = false;
if (ex.Errors.Any(e => e.ErrorNumber == "CS1969"))
{
try
{
_logger.InfoFormat("Attempting to manually load the Microsoft.CSharp.RuntimeBinder.Binder");
Assembly csharp = Assembly.Load("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
Type type = csharp.GetType("Microsoft.CSharp.RuntimeBinder.Binder");
retry = true;
}
catch(Exception exLoad)
{
_logger.Error("Failed to manually load runtime binder", exLoad);
}
}
if (!retry)
throw;
}
}
うまくいけば、これは他の誰かを助けるかもしれません。