14

假设您在 IIS 中有 2 个不同的 ASP.NET 应用程序。此外,您还需要在这 2 个应用程序之间共享一些 ASCX 控件。

创建“用户控件库”的最佳方法是什么,以便您可以在 2 个应用程序中使用相同的控件实现,而不必复制代码?

控件有 ASCX,后面有 HTML + 代码。


复合控件会很困难,因为我们与使用 ASCX 文件中的 HTML 语法来设置控件样式的设计人员合作。

Tundey,我们在这里使用 SVN。你有如何实施你的建议的例子吗?SVN 如何共享 ASP.NET 控件?

谢谢!

4

10 回答 10

15

Scott Guthrie 在这里就如何设置用户控件库项目,然后使用预构建事件将用户控件复制到多个项目中提供了一些很好的建议。它真的很好用。

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx

于 2008-08-26T14:40:38.193 回答
5

如果您希望能够在单独的项目中使用它们,则需要创建复合控件而不是 .ASCX 控件。

于 2008-08-26T13:39:47.870 回答
2

除了 Tundey 所说的之外,NTFS Link shell 扩展在其他独立项目之间共享大量内容(例如:带有 .ascx/.aspx 的文件夹)时很有帮助。如果是代码,我认为从 VCS 制作另一个工作副本更可取。

于 2008-12-17T10:26:58.923 回答
2

看看这个:http ://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx?msg=1782921

于 2010-01-27T10:40:29.253 回答
1

另一种方法是使用您的源代码控制工具在您的 Web 应用程序之间“共享”ASCX 控件。这将允许您对任一应用程序中的控件进行更改,并让源代码控制确保更改反映在我们的 web 应用程序中。

于 2008-08-26T13:43:53.680 回答
1

我首先牺牲了一些构建控件的便利性来设法做到这一点。

您可以创建一个控件库项目,该项目将为您生成一个控件库 DLL。缺点是您必须仅使用代码创建控件。在我的上一个项目中,这很好。在更复杂的控件中,这可能是一个问题。

这是一个例子:

<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _
Public Class BreadCrumb
    WebControl

    <Bindable(True)> _
    Property Text() As String
        '...'
    End Property

    Protected Overrides Sub RenderContents(output as HtmlTextWriter)
        output.write(Text)
    End Sub

    Private Sub Page_Load(...) Handles MyBase.Load
        ' Setup your breadcrumb and store the HTML output '
        ' in the Text property '
    End Sub
End Class

您放入该 Text 属性的任何内容都将被渲染。

然后,您在此处放置的任何控件都可以像您使用的任何其他控件一样运行。只需将其导入您的工具箱,制作您的注册参考,然后将其放到 ASP 页面上。

于 2008-08-26T14:13:52.843 回答
0

我在这里使用 StarTeam,它允许您跨多个文件夹“共享”对象(文件、更改请求、要求等)。不确定 Subversion (SVN) 是否具有该功能。如果没有,您可以使用另一个技巧:创建一个从控件的主要位置到其他项目中的位置的连接。联结就像 Unix 符号链接。您可以从此处下载用于在 Windows 中创建联结的工具

于 2008-08-26T13:49:58.517 回答
0

我注意到 ASP.Net 中的控件的最大问题是,一旦构建控件,您就无法轻松获得设计器支持来构建控件在站点中使用该控件。我能够做到这一点的唯一方法是创建一个没有代码隐藏的 .ascx 控件(即:所有服务器端代码都在具有 runat="server" 属性的 .ascx 文件中的脚本标记中) .

但即便如此,您仍然必须复制 .ascx 文件,因此如果您需要进行更改,这意味着在您使用它的每个位置更新文件。所以,是的,确保它在源代码控制中。

于 2008-08-26T14:02:31.903 回答
0

我最近做了一个 Web 应用程序,它只是从一个 Web 应用程序(aspx、master 和 ascx)中引用了文件(总共大约 90 个)而没有太多问题。也就是说,我使用的是MVP 模式的大量修改版本,大量接口和约定以降低复杂性,相同的中间层和一个站点是另一个站点的子集。

大问题:

  1. 母版页(以及设计器和 html 视图格式)在引用的文件上不起作用,因此您失去了很多功能。一个预构建步骤和大量 svn:ignore 条目是我对此的破解。让 CruiseControl.NET 在正确的文件夹中执行预构建任务也很痛苦。
  2. 共享页面/控件需要非常了解它们所接触和引用的内容,以避免引入额外的依赖关系。
  3. 两个站点被锁定在一起以进行部署。
  4. 我现在必须祈祷维护者阅读我关于我造成的混乱的小文档。它远远超出了我在 ASP.NET 项目中看到的内容。

我承受着巨大的时间压力才能让它工作,它确实如此,现在这两个应用程序都在生产中。我不会推荐它,但如果您有兴趣,请从以下位置开始:

添加现有项目,选择一些文件,单击添加按钮的箭头并说添加为链接

于 2008-09-02T23:02:01.817 回答
0

我有一个建议。我们可以像往常一样在网站项目中创建用户控件来跨多个应用程序使用用户控件。然后更改网站属性使用固定命名和单页程序集。然后我们可以将用户控件dll用于多个应用程序。

于 2013-02-05T06:45:47.777 回答