0

プロジェクトAにはビューが含まれています。プロパティウィンドウで「埋め込みリソース」とマークされたView1.ascxと呼びましょう。

PROJECTAとPROJECTBおよび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."

これを機能させる方法はありますか?または、どういうわけか、すべての「再利用された」ビューを別のアセンブリに移動する必要がありますか?ビューはプロジェクトAのクラスを使用するため、プロジェクトA内に保持しました。

すべてを明確にするために:通常、2回目のビルドは機能し、コードとビューはすべて機能します。最初のビルドの試行が失敗するまで10秒待たなければならないのは非常に時間の無駄です。

4

1 に答える 1

2

明らかに、私のアセンブリリソースプロバイダーは、ここで説明されているようにメモリにdllをロードする推奨される方法を使用する代わりに、Assembly.LoadFileからdllをロードするAssemblyResourceVirtualFile:VirtualFileoebjectを使用しました: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 に答える