2016-11-22 12 views
6

我有以下情况:如何将发布为Web应用程序的模板与使用此封装器的Web应用程序集成?

我目前的项目都是这样的:

一个master pageset of pages.aspx继承母版页的布局。

现在我想要大规模。所以我想要做的是:

两种类型的项目发布为two separate web applications(松散耦合):

  1. wrapper(主一般对于网站
    应用程序模板)取代(的母版页在相同的
    应用程序中使用),此项目用作框架或模板,如下所示: :(Header,Footer)[(Sidebar(Menu),Body) dynamic according to the web application which use the wrapper]

enter image description here

  • 任何web应用程序将填补动态两个部分包装物(主体和 的菜单)。

  • 如何包装和应该使用这种包装和他们两人的发布为两个独立的Web应用程序的Web应用程序集成?


    注:

    主要的一点,我不想每次更改包(包装) 再版所有使用这个包的应用程序(的包装) 采取更新。

    +0

    你能不能简单地说出你正在做的事情吗? – Webruster

    +0

    @Webruster好吧,如果我想创建一个web应用程序,通常我会在同一个项目中创建一个母版页并使用它。现在我不想做因为我有很多Web应用程序必须使用相同的母版页,所以我想重复使用它并为此主包装器创建单独的项目,所以如果我在此包装器中更改某些内容,则不必更改全部内容我的Web应用程序使用它并发布所有这些应用程序。简单地说,我想要一个例子来澄清这个想法(包装与我的问题中的细节)和(任何Web应用程序应该使用这个包装)之间的整合。 –

    +0

    @Webruster:你能告诉我你是否想要更多细节吗? –

    回答

    3

    我已经通过使用NuGet包解决了这个问题。它们可以像你需要它们一样复杂或简单。通过手动创建.nuspec file,使用command line tool构建基本母版页并将其托管在文件系统(本地或网络)上即可实现基本母版页布局。

    一个配置文件添加到您的模板项目的根 - 把它template.nuspec并添加以下内容:

    <?xml version="1.0" encoding="utf-8"?> 
    <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
        <metadata>  
        <id>MyAppTemplate</id> 
        <version>1.0.0</version> 
        <description>A template web application</description> 
        <authors>Me or my company</authors> 
        </metadata> 
        <files> 
        <file src="Site.Master" target="content\Site.Master" /> 
        <file src="Site.Master.cs" target="content\Site.Master.cs" /> 
        <file src="Site.Master.designer.cs" target="content\Site.Master.designer.cs" /> 
        </files> 
    </package> 
    

    注目标是“内容” - 这将在该项目中删除主页NuGet软件包的安装位置。您可能也希望将母版页的命名空间更改为$rootnamespace$,因为这样会做source code transformation,这将使母版页成为与项目其余部分相同的命名空间的一部分。

    在命令行,然后你可以只调用nuget.exe pack path\to\nuspec\file

    ,这将导致创建.nupkg文件。对于本地开发,我通常会把它放在C:\NuGet\Local,尽管这可能是网络共享\\MyShare\InternalNuget或者如果您想进一步研究,可以使用如ProGetTeamCity的解决方案。

    然后在Visual Studio中,您可以将其添加为包源:

    工具 - > NuGet包管理器 - >软件包管理器设置 - >软件来源

    点击加号并添加您的文件夹/ unc路径/ url,然后您可以在任何其他项目中重复使用它。

    作为一般规则,最好在创建项目时允许NuGet覆盖现有的Site.Master,然后不要编辑文件,因为这允许您使用NuGet软件包版本控制集中管理更改。但是,如果您希望进行项目特定的更改,那么您只需记住不要让NuGet包在后续更新中覆盖项目版本。

    您可以在模板项目中包含所有类型的文件。这包括.ascx用户控件,css和javascript文件以及编译或未编译的基本页面(继承自System.Web.UI.Page)。可能性是无止境。使用<asp:contentplaceholder/>和适当的CSS,可以通过用户控件在大多数项目中使用通用菜单,但仍然可以将其替换为其他项目中更复杂的菜单,而无需修改主模板。

    编辑:

    我想这可能是可能的通过拆分包装分成两个部分来实现(至少对于相对简单的内容)所需的效果。第一个是包含母版页的NuGet包。该母版页可以包含图表中页眉和页脚的iframe,常见样式和javascript的内容占位符以及CSS和脚本标签。

    包装的第二部分将是一个单独的应用程序,托管iframe和.css和.js文件的内容。像添加一个新的JavaScript库这样的重大更改仍然需要更新主页面,但是通过更改包装文件并重新发布,可以实现诸如添加新函数或CSS类或更改品牌或徽标等小改动。有点像托管自己的简单CDN。

    母版页是这样的:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="$rootnamespace$.SiteMaster" %> 
    <html> 
    <head runat="server">  
        <title><%: Page.Title %></title>  
        <link href="https://example.com/mywrapperapplication/styles/mywrapper.css" rel="stylesheet" /> 
    </head> 
    <body> 
        <iframe src="https://example.com/mywrapperapplication/header.html" /> 
        <form runat="server">     
         <asp:ContentPlaceHolder ID="MenuContent" runat="server"></asp:ContentPlaceHolder>    
         <asp:ContentPlaceHolder ID="BodyContent" runat="server"></asp:ContentPlaceHolder> 
        </form> 
        <iframe src="https://example.com/mywrapperapplication/footer.html" /> 
        <script type="text/javascript" src="https://example.com/mywrapperapplication/scripts/mywrapper.js"></script> 
    </body> 
    </html> 
    

    然后你有静态内容或一个简单的应用程序有4个(或以上)文件部署在https://example.com/mywrapperapplication

    header.html --or aspx or whatever 
    footer.html 
    /scripts/mywrapper.js 
    /styles/mywrapper.css 
    

    任何变化您对这些文件中的任何文件进行制作时,都将自动在包装应用程序中传播,因为它们是从母版页链接的。你只需要重新发布的包装应用程序,如果你想添加一个额外的文件,例如

    <link href="https://example.com/mywrapperapplication/styles/mynewstyles.css" rel="stylesheet" /> 
    
    +0

    您能否提供一个简单的示例请 –

    +1

    @AnynameDonotcare请参阅已编辑的答案 –

    +0

    此处的主要问题是:如果我在服务器上发布包应用程序,并发布消费网络应用程序。然后我想对模板进行更改,我不想再次重新发布我的消费应用程序!这就是为什么我想将它们分开到项目中。请您澄清这一点? –

    2

    为什么不公布的消费应用,用户控件,并有母版页(您的包装)编程它们注入,类似到DotNetNuke做什么。

    https://msdn.microsoft.com/en-us/library/c0az2h86.aspx

    用户控件可以单独编译,当包装被改变不会需要重新编译。

    相关问题