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秒才是非常浪费时间。
答案 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;
}