我有一个运行了3年没有问题的MVC 5 Web应用程序。昨天我更改了分支,突然出现错误"Could not load file or assembly 'System.Web.Http', Version=4.0.0.0"
。这发生在Entity Framework OnModelCreating中(尽管我确定EF不是问题)。
OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var entitymethod = typeof(DbModelBuilder).GetMethod("Entity");
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
try
{
var a = assembly.GetTypes();
}
catch(ReflectionTypeLoadException ex)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
sb.AppendLine(exSub.Message);
System.IO.FileNotFoundException exFileNotFound = exSub as System.IO.FileNotFoundException;
if (exFileNotFound != null)
{
if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine("Fusion Log:");
sb.AppendLine(exFileNotFound.FusionLog);
}
}
sb.AppendLine();
}
string errorMessage = sb.ToString();
}
//find alle de klasser der arver fra Entity
var entitytypes = assembly.GetTypes().Where(x => x.IsSubclassOf(typeof(Entity)));
foreach (var type in entitytypes)
{
if(type.Name != "Field")
//lav et DbSet af hver type
entitymethod.MakeGenericMethod(type).Invoke(modelBuilder, new object[] { });
}
}
请注意,try catch用于调试此问题。 我可以看到foreach循环已到达的程序集是Microsoft.Practices.Unity.WebApi,因此我猜这是需要System.Web.Http的程序集。事实是,该Web应用程序正在针对不同客户的大约30种不同Web应用程序上运行,服务器和我的同事计算机都没有该程序集。
我尝试从Web应用程序复制程序集,该程序可以正常运行,但无效。
答案 0 :(得分:0)
Property window 使用复制本地True Property,遇到相同的问题并解决
答案 1 :(得分:0)
您可以使用添加引用Add Reference 来添加System.Web.Http,然后确保
Copy Local True 请注意,您已经安装了同事计算机.NET,因此该DLL将从GAC文件夹中选取,以查看GAC enter link description here的更多详细信息
答案 2 :(得分:0)
GIT(假设您使用的是GIT)通常会忽略.dll文件和.exe文件。可能是System.Web.Http程序集的dll文件从未添加到GIT中,并且始终位于驱动器上。现在,您已经更改了分支,它已经签出了GIT上的所有内容,并删除了驱动器上的内容。
我确实在'Microsoft.AspNet.WebApi.Core'中找到了System.Web.Http程序集。要添加此代码:
如果这很重要,则可能要从.gitignore中删除.dll;因为这种情况也发生在我身上,因为Visual Studio通常只将dll放入bin文件夹中。