Ich habe versucht, einige der Code aus here und here, aber ich bekomme einen Fehler auf der Seite beim Versuch, die Remote-Ansicht in einem separaten Projekt verweisen: "Wert kann nicht null sein. Parameter name : stream "Pluggable MVC-Ansicht Null zurück
Unten ist mein AssemblyResourceProvider und Controller in meinem Master MVC 4-Projekt. Ich habe auch die ganze Lösung selbst beigefügt here. Kann jemand helfen zu sehen, was schief läuft? Danke für jede Hilfe oder Vorschläge.
public class AssemblyResourceProvider : System.Web.Hosting.VirtualPathProvider
{
private bool IsAppResourcePath(string virtualPath)
{
string checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/Plugin/", StringComparison.InvariantCultureIgnoreCase);
}
public override bool FileExists(string virtualPath)
{
return IsAppResourcePath(virtualPath) || base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
return IsAppResourcePath(virtualPath)
? new AssemblyResourceVirtualFile(virtualPath)
: base.GetFile(virtualPath);
}
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return !IsAppResourcePath(virtualPath)
? base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart)
: null;
}
}
public class AssemblyResourceVirtualFile : VirtualFile
{
string path;
public AssemblyResourceVirtualFile(string virtualPath) : base(virtualPath)
{
path = VirtualPathUtility.ToAppRelative(virtualPath);
}
public override Stream Open()
{
string[] parts = path.Split('/');
string assemblyName = parts[2];
string resourceName = parts[3];
var assembly = Assembly.LoadFile(Path.Combine(HttpRuntime.BinDirectory, assemblyName));
return assembly != null
? assembly.GetManifestResourceStream(resourceName)
: null;
}
}
Und mein Heimsteuerung:
public ActionResult Pluggable()
{
//ViewBag.Name = name;
return View("~/Plugin/PluginView1.dll/PluginView1.Views.Home.Pluggable.cshtml");
}
Ja, öffentliche Überschreibung Stream Open() kann die Assembly nicht finden und gibt einen Nullstream zurück, oder GetManifestResourceStream findet keine Ressource mit dem Namen. Dies kann passieren, wenn die cshtml-Datei nicht auf eine eingebettete Ressource eingestellt ist oder Ihr vollständiger Namespace falsch ist. –
Ich habe daran gedacht, die Ressource einzubetten, und ich glaube, dass mein Namespace nach dem anderen Post korrekt ist. – TruMan1
Haben Sie daran gedacht, die DLL in den Ordner Bin zu kopieren? oder wo sonst noch deine Plugins laden? –