web.config
===========================
<configuration>
  <system.web>
    <compilation>
      <assemblies>
                <add assembly="TemplateControlSamples"/>
      </assemblies>
    </compilation>
  </system.web>    
</configuration>c1.aspx
==============================
<%@ Page Language="C#" Debug="true" %>
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
    <script runat=server language=c#>
    void Page_Load() {
        DataBind();
    }
    </script><html>   <body>      <form method="POST" runat="server">          Non Templated version:          <TemplateControlSamples:Template1 Message="Hello World!" runat=server/>          <hr>          Templated version:          <TemplateControlSamples:Template1 Message="Hello World!" runat=server>              <MessageTemplate>                <b><i><u>
                    <%# Container.Message %>
                </u></i></b>              </MessageTemplate>          </TemplateControlSamples:Template1>      </form>   </body></html>c1.asp.cs
================================
using System;
using System.Data;
using System.Web.Services;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Text;namespace TemplateControlSamples {    public class TemplateItem : Control, INamingContainer {
        private String     _message         = null;        public TemplateItem(String message) {
            _message = message;
        }        public String Message {           get {
              return _message;
           }
           set {
              _message = value;
           }
        }
    }    [
        ParseChildren(true)
    ]
    public class Template1 : Control, INamingContainer {        private ITemplate  _messageTemplate = null;
        private String     _message         = null;        public String Message {           get {
              return _message;
           }
           set {
              _message = value;
           }
        }        [
            PersistenceMode(PersistenceMode.InnerProperty),
            TemplateContainer(typeof(TemplateItem))
        ]
        public ITemplate MessageTemplate {
           get {
              return _messageTemplate;
           }
           set {
              _messageTemplate = value;
           }
        }        public override void DataBind() {
            EnsureChildControls();
            base.DataBind();
        }
        protected override void CreateChildControls() {       
           if (MessageTemplate != null) {
              Controls.Clear();
              TemplateItem i = new TemplateItem(this.Message);
              MessageTemplate.InstantiateIn(i);
              Controls.Add(i);
           }
           else {
              this.Controls.Add(new LiteralControl(this.Message));
           }
        }
    }
}我把文件c1.asp.cs编译放到bin文件夹里,运行c1.aspx时,但提示以下错误.
分析器错误信息: 找不到文件或程序集名称“TemplateControlSamples.TemplateItem”,或找不到它的一个依赖项。源错误: 
行 3:      <compilation>
行 4:        <assemblies>
行 5:                  <add assembly="TemplateControlSamples.TemplateItem"/>
行 6:        </assemblies>
行 7:      </compilation>
 源文件: D:\ASP.NET\demo\wc\web.config    行: 5 还有就是这个
      <assemblies>
                <add assembly="TemplateControlSamples"/>
      </assemblies>
是怎样用的.
不是直接用<%@ Import Namespace="HelloWorld" %>调用bin里面的dll就可以的吗?

解决方案 »

  1.   

    把 <compilation>
          <assemblies>
                    <add assembly="TemplateControlSamples"/>
          </assemblies>
        </compilation>
    删除就可以了使用 服务器控件,只需要在头部 注册
    <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>在aspx文件里写 <TemplateControlSamples:TemplateItem Message="Hello World!" runat=server>就可以了
      

  2.   

    删除了还是出现错误:分析器错误信息: 找不到文件或程序集名称“TemplateControlSamples”,或找不到它的一个依赖项。源错误: 
    行 1:  <%@ Page Language="C#" Debug="true" %>
    行 2:  <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
    行 3:      <script runat=server language=c#>
    行 4:      void Page_Load() {
     源文件: D:\ASP.NET\demo\wc\c1.aspx    行: 2
      

  3.   

    把文件c1.asp.cs编译放到bin文件夹里 ,把 Assembly="TemplateControlSamples" %> 的 改成 你编译c1.ASPX.CS的文件名 或把它编译成 TemplateControlSamples.DLL
      

  4.   

    你的意思是改成这样吗?
    <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="c1.asp.dll" %>web.config改成
    ========================
    <configuration>
      <system.web>
      </system.web>    
    </configuration>但还是出错:
    分析器错误信息: 找不到文件或程序集名称“c1.asp.dll”,或找不到它的一个依赖项。源错误: 
    行 1:  <%@ Page Language="C#" Debug="true" %>
    行 2:  <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="c1.asp.dll" %>
    行 3:      <script runat=server language=c#>
    行 4:      void Page_Load() {
     源文件: D:\ASP.NET\demo\wc\c1.aspx    行: 2 
      

  5.   

    <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="c1.asp" %>
      

  6.   

    通过了,多谢 LaoDai_Net(老代.Net『学无止境』) 
    我想理清一点问题就是
    第一:
    你前面所说:使用 服务器控件,只需要在头部 注册
    <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
    你所说的服务器控件应该改为用户自定义控件吧?还是我理解上有出入?
    第二:
    编译后的dll文件是否不能手工改名的,因为我之前编译成c1.asp.dll运行通过了,但这把文件名改成TemplateControlSamples.dll,而注册语句改成:<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>就出错了,说是:找到的名为“TemplateControlSamples”的程序集清单定义与程序集引用不匹配。是否文件在编译时就把文件名写入文件内,所以就不能手工直接修改了.
    第三:
    就是关于web.config中
    <configuration>
      <system.web>
        <compilation>
          <assemblies>
            <add assembly="DataObj"/>//这一块是怎样用的?是否要把所有bin中的类都写入,它直到什么作用?
          </assemblies>
        </compilation>
      </system.web>    
    </configuration>