Visual Studio因使用“嵌入式资源”嵌入视图而锁定DLL

时间:2012-08-09 15:06:11

标签: c# asp.net-mvc dll visual-studio-2012

PROJECT A包含一个View,我们称之为View1.ascx,在属性窗口中标记为“Embedded Resource”

PROJECT A和PROJECT B和C使用自定义资源提供程序从PROJECTA.DLL加载view1

这样我可以在项目中重复使用我的观点。

可悲的是,这导致visual studio在每次更改PROJECTA.dll后第一次无法构建PROJECT B或OR C

"Error  12  Could not copy "C:\GIT\PROJECTA\PROJECTA\bin\PROJECTA.dll" to "bin\PROJECTA.dll". Exceeded retry count of 10. Failed."

有没有办法让这项工作?或者我应该以某种方式将所有“重用”视图移动到单独的程序集中?视图使用PROJECT A中的类,这就是我将它们保存在PROJECT A中的原因

要使一切清晰:第二次构建它通常有效,并且代码和视图都正常工作,第一次构建尝试失败需要等待10秒才是非常浪费时间。

1 个答案:

答案 0 :(得分:2)

显然我的assemblyresourceprovider使用了AssemblyResourceVirtualFile:VirtualFile oebject,它正在从Assembly.LoadFile加载我的dll而不是使用建议的方式在内存中加载dll,如下所述:http://fzysqr.com/2010/04/26/asp-net-mvc2-plugin-architecture-tutorial/ 我留下了旧的代码行,以便你们看看问题在哪里

public override System.IO.Stream Open()
{
    string[] parts = path.Split('/');
    string assemblyName = parts[2];
    string resourceName = parts[3];


    assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
    byte[] assemblyBytes = File.ReadAllBytes(assemblyName);
    System.Reflection.Assembly assembly = Assembly.Load(assemblyBytes);
    /*System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(assemblyName);*/
    if (assembly != null)
    {
        Stream resourceStream = assembly.GetManifestResourceStream(resourceName);
        return resourceStream;
    }
    return null;
}