0

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

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

这样我就可以跨项目重用我的视图。

可悲的是,这会导致 Visual Studio 在每次更改 PROJECTA.dll 后第一次无法构建 PROJECT B 或 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 秒以使第一次构建尝试失败,这真的是非常浪费时间。

4

1 回答 1

2

显然,我的 assemblyresourceprovider 使用了 AssemblyResourceVirtualFile:VirtualFile oobject,它从 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;
}
于 2012-08-09T15:15:44.663 回答