2011-08-03 11 views
1

実際は私の目的はです。Webユーザーコントロール内のGACからdllを使用する方法

  1. asp.net Webサービス(名前空間WS、クラスのサービス1)を作成します
  2. WebサービスからDLLを作成
  3. GAC
  4. にこのDLLをインストール
  5. ASP.NET Webアプリケーションを作成しないでくださいこのDLLの参照をGACに追加する
  6. Webユーザーコントロールをファイルの背後にコードなしで作成する
  7. WebユーザーコントロールのコードをWebサービスを使用するように記述する上記で作成した(アプリケーションへの参照なし)

質問は次のとおりです。

  1. アセンブリがアプリケーション
  2. に参照されていなかった場合でも、GAC内のWebアプリケーションの検索設定アセンブリをすることができます私はこのウェブ ユーザーコントロールを使用することができます(それはにISNので、このような状況ではUCはコンパイルされません。 ' コードの後ろに)WebPartsのような他のプロジェクトで?

PS:私の最後の状況: Service1.asmx.cs:

using System.Web.Services; 

namespace ws 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class Service1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 
    } 
} 

WebUserControl1.ascx:

<%@ Control Language="C#" ClassName="wuc" %> 

<script runat="server"> 
    protected override void CreateChildControls() 
    { 
     base.CreateChildControls(); 
     ws.Service1 srv = new ws.Service1(); 
     btn.Text = srv.HelloWorld(); 

    } 
</script> 

<asp:Button runat="server" ID="btn" Text="asdasd" /> 

のDefault.aspx:

... 
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %> 
... 
    <form id="form1" runat="server"> 
    <div>  
     <uc1:WebUserControl1 ID="WebUserControl11" runat="server" />  
    </div> 
    </form> 
... 

私がコンパイルウェブページにこのエラーが表示された: enter image description here

答えて

0

私は学んでmy blogに投稿しました。

まず、WebサービスからDLLを生成する必要があります。

@SET WSDL="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\wsdl.exe" 
%WSDL% /language:cs /out:c:\temp\servis.cs http://localhost:85/WebService1.asmx?WSDL 

私たちは、GACに私たちのWebサービスのDLLを展開します。だから私たちはsnkファイルを持っている必要があります。私たちはcsからdllファイルを作成しますが、snkを作成する前に作成します。

@SET SN="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\sn.exe" 
%SN% -k c:\temp\servis.snk 

今、私たちは、CSファイルから

@SET CSC="c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" 
%CSC% /target:library /out:c:\temp\servis.dll c:\temp\servis.cs /keyfile:C:\temp\servis.snk 

をDLLを生成することができます今、私たちは、私たちは、GAC

で私たちのDLLのフルネームを学ぶことができGAC

@SET GACUTIL="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" 
%GACUTIL% -if c:\temp\servis.dll 

にこのDLLを展開することができます

%GACUTIL% /l servis.dll 

in .ascxファイルこれらのlinを記述することができます中にscript runat=serverタグ

string sFullName = "servis, version=1.0.0.0 publickeytoken=asdhfasdfjk2323" 
string sClass = "Service1" 
object instance = Activator.CreateInstance(sFullName, sClass).Unwrap(); 
Type tip = instance.GetType(); 
MethodInfo mi = tip.GetMethod("HelloWorld"); 
object result = mi.Invoke(instance,null); 
string sResult = result.ToString(); 
2

My objective is;

  1. Create asp.net web service (namespace ws, class Service1)
  2. Create dll from web service
  3. Install this dll to GAC

Aaaaaaahhhhhh!

実行時にアセンブリをGACにインストールする必要があるのはなぜですか?これほど良いことはできません!

両方の質問の答えが「はい」の場合は、Assembly.Loadのようなものを直接使用するか、アセンブリを使用してタイプをロードしようとするページを間接的に作成するか修飾された型名。

関連する問題