【问题标题】:Visual studio locking DLL because of embedding views using "embedded resource"由于使用“嵌入式资源”嵌入视图,Visual Studio 锁定 DLL
【发布时间】:2012-08-09 15:06:11
【问题描述】:

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 秒以等待第一次构建尝试失败,这实在是非常浪费时间。

【问题讨论】:

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


    【解决方案1】:

    显然我的 assemblyresourceprovider 使用了 AssemblyResourceVirtualFile:VirtualFile 对象,它从 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多