日安,
我在想你能不能帮我,
我正在阅读与以下内容相关的指南:复合Web指导
我正在阅读题为“为模块化Web应用程序定义解决方案结构”的部分,特别是“”部分。我似乎理解与此相关的基本概念,但是我似乎无法找到一个合理的方法来允许它在单独的项目中与web forms 一起工作。
我意识到这里将不支持对母版页的设计时支持,但是我的问题是如何使用类似统一(或另一个容器)之类的东西来允许我将我的项目(包括web表单页和文件后面的代码)完全独立地部署到一个文件夹中,并将它们插入解决方案中,指南似乎不清楚如何支持这些模块,每当我试图导入这些模块时,我就会出现运行时错误。我已经通过导出控制器成功地使用了MVC。我会感谢你的支持,但我意识到你是一个非常忙碌的人。如果你能把我和一个博客或资源联系起来,详细地解释一下这一点,我将永远是一个伟大的人。谢谢你抽出时间来读这个。总括而言,我希望达到以下目的。
发布于 2012-04-11 02:19:06
一段时间前,我做了一些类似的事情,比如插件类型的系统,其中的插件,页面和控件,但是存储在单独的程序集中。
我们最后做的是:
在VirtualPathProvider上注册一个自定义的Application_Start:
void Application_Start(object sender, EventArgs e)
{
System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(
new YourCustomVirtualPathProvider());
}重写VirtualPathProvider中的必要方法(基于您的逻辑):
public class YourCustomVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
{
private const string RESERVED_PATH = "/components/external";
public override bool FileExists(string virtualPath)
{
if (virtualPath.StartsWith(RESERVED_PATH))
return true;
else
return base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
if (virtualPath.StartsWith(RESERVED_PATH))
return new MyCustomVirtualFile(virtualPath);
else
return base.GetFile(virtualPath);
}
//You'll also need to override methods for directories, omitted for brevity.
}现在创建MyCustomVirtualFile类以从程序集加载文件:
public class MyCustomVirtualFile : System.Web.Hosting.VirtualFile
{
private string _virtualPath;
public MyCustomVirtualFile(string virtualPath) { _virtualPath = virtualPath }
public override System.IO.Stream Open()
{
//You'll need some method to tie a virtual path to an assembly
//Then load the file from the assembly and return as a Stream
Assembly assembly = Foo.GetAssemblyByVirtualPath(_virtualPath);
string fileName = Foo.GetFileNameFromVirtualPath(_virtualPath);
return assembly.GetManifestresourceStream(fileName);
}
}要以这种方式加载的ASPX/ASCX或资源文件必须作为嵌入式资源添加到程序集中。您可以通过更改文件的"Build“属性来做到这一点:

后面的代码将被编译到程序集中,如果您使用的是共享的bin文件夹,您就不需要再做任何事情了。如果它们不被共享,则必须附加到全局应用程序中的AssemblyResolve和TypeResolve事件(更多关于此这里)。
出于安全考虑,我们最终放弃了这个想法,并最终使用了MEF数据契约,但是如果您的所有其他程序集都是第一个程序集,那么这应该是快速而简单的。希望这能有所帮助。
发布于 2012-04-07 15:38:48
看看DotNetNuke。社区版是相当有能力和免费的。
1.)这是一个没有silverlight的开源C#解决方案。它确实在客户端使用javascript (但我认为您的需求并不意味着排除javascript)
2.)Dotnetnuke的核心是一个框架,它允许开发人员创建模块(有可用的启动项目),并将其插入其中。作为开发人员,您将在一个单独的项目中创建一个模块,将它们打包并根据需要进行部署。
已经有大量的第三方模块可用。
3.)该框架已经内置了一个用于导出和导入模块的web接口。
4.)当一个模块被安装时,它会自动放置在他们自己的文件夹中。
https://stackoverflow.com/questions/9992009
复制相似问题