Combatting GAC Reference Errors

PowerTools 2004-05-09 05:09:51
Building a WebControl can pretty straight forward, especially when you put all of your classes into a single assembly. However, many times it makes more sense to separate out the classes which provide common functionality, into another 'shared' assembly, that can be re-used for multiple projects. The problem is, when an ASPX page is compiled which includes this custom control, the compiler will not look in the Global Assembly Cache (GAC) for the shared assembly, even though your project has a reference to it. When you try to view your page in a browser, you'll end up getting an error that looks something like this -

Server Error in '/WebApplication1' Application.
________________________________________
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0234: The type or namespace name 'Shared' does not exist in the class or namespace 'Infragistics.WebUI' (are you missing an assembly reference?)

Source Error:


Line 12: <body MS_POSITIONING="GridLayout">
Line 13: <form id="Form1" method="post" runat="server">
Line 14: <iglbar:UltraWebListbar id="UltraWebListbar1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" BorderStyle="Ridge" BorderWidth="4px" Width="124px" Height="200px" BarWidth="100%">
Line 15: <Groups>
Line 16: <iglbar:Group TextAlign="Left" Text="Group"></iglbar:Group>

Source File: c:\inetpub\wwwroot\WebApplication1\WebForm1.aspx Line: 14

Notice that your control's assembly was found just fine, but your shared assembly, which your control has a dependency on, was not. Looking at the Detailed Compiler Output on the error page, you'll notice that your reference was not added to the compiler string which was used to dynamically compile this ASPX page. You can quickly get around the compilation problem by setting the "Copy Local" property to 'true' for the resource in your project. This will copy the assembly into your web application's bin directory, where the runtime will always look to find a resource. However, as a result of copying the assembly local, you lose all of the advantages of putting your assembly into the GAC. So the question remains, how do you tell .NET to search the GAC for your referenced assembly, when compiling an ASPX page?

There are actually a couple of different ways to do this. The first way, is to add an Assembly Directive to your ASPX page. The directive will specify the full name of the Assembly to look for, including the Version, Culture, and PublicKeyToken. Here is an example of what your tag should look like.

<%@ Assembly Name="Infragistics.WebUI.Shared.v2, Version=2.0.20041.10, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" %>

The drawback of adding the directive to the page becomes clearly evident when you have multiple pages in your application. You will need to include this Assembly Directive on each page that has a control which requires a reference to your shared assembly. This becomes a major maintenance problem when the version number of your referenced assembly inevitably changes. Luckily, there is another place you can use, which will be effective for your entire web application, not just a single page.

To get your entire project to search the GAC for this assembly, you can modify the Compilation section of your web.config file. You will need to add an Assembly tag, which again specifies the full name of your assembly. Here is an example of what the Compilation section would look like before -

<compilation
defaultLanguage="c#"
debug="true"
/>

And after -

<compilation defaultLanguage="c#" debug="true">
<assemblies>
<add assembly="Infragistics.WebUI.Shared.v2, Version=2.0.20041.10, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
</assemblies>
</compilation>

Now the compiler knows that it should look for a Strong Named assembly, and has all of the information it needs to retrieve that assembly from the GAC. If your resource assembly's version number should ever change, you only need to adjust the version number in one place - the web.config file.


...全文
138 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
源码链接: https://pan.quark.cn/s/8ddf8a1c92f9 **libcurl用于获取大型文件**libcurl作为一个开源的C语言库,提供了一系列的API来处理与URL相关的任务,涵盖了HTTP、FTP、SMTP等多种网络协议的应用。在执行大型文件的下载操作时,libcurl展现出卓越的性能表现和高度的灵活性,能够高效地管理大文件传输过程,有效预防内存溢出及其他潜在问题。**libcurl的基础操作**libcurl的基础应用包括以下几个环节:1. **初始化**:需要借助`curl_global_init()`函数来启动libcurl的工作环境。2. **建立会话句柄**:通过`curl_easy_init()`函数创建一个会话句柄,该句柄将用于后续所有的操作流程。3. **配置选项**:运用`curl_easy_setopt()`函数来设定多种参数,例如目标URL、超时时间、重试次数以及数据写入的回调函数等。4. **执行请求**:调用`curl_easy_perform()`函数来实施下载操作。5. **释放资源**:使用`curl_easy_cleanup()`函数来释放已经占用的资源。**获取大型文件时的重要设置**1. **数据写入回调函数**:在处理大型文件下载时,通常不希望一次性将整个文件载入内存。可以配置`CURLOPT_WRITEFUNCTION`选项,指定一个回调函数来处理接收到的数据片段,这样libcurl在接收到数据时会调用该函数,使得我们可以按需将数据写入文件或缓冲区。2. **缓冲策略**:可以设定缓冲区的大小(比如,通过`CURLOPT_BUFFERSIZE`),来控制每次接收数据的数量,从而优化内存...
内容概要:本文档整合了《鬼谷子·决篇》与《三略·审权变第三》《差德行第四》三大古代智慧典籍,构建了一套“决策+形势+用人”三位一体的领导力提升体系。通过28天三合实战路径、三维诊断工具、9个实用模板及独特的“身体锚点”仪式,系统解决管理者在决策犹豫、形势误判、人岗错配等方面的痛点。全文涵盖理论溯源、方法论拆解(如三步决策法、审权变四步法、差德行四步法)、历史案例对照(范蠡 vs 项羽)以及跨资源联动建议,形成从认知到实践的完整闭环。; 适合人群:中基层管理者、创业者、职场进阶者,尤其是面临决策困境、环境适应困难或团队用人问题的人群;具备一定管理经验或自我提升意识的个体亦可受益。; 使用场景及目标:① 提升重大事项的决策质量,避免反复纠结与事后后悔;② 增强对外部环境变化的敏感度与应对能力,实现灵活调整;③ 科学评估人才德才素质,实现人岗精准匹配,减少用人失误;④ 构建个人化的决策-应变-用人标准化流程(SOP)。; 阅读建议:建议按照28天路径逐步实践,结合自测表定位短板,优先突破薄弱模块;配套工具模板需实际填写使用,配合身体锚点仪式强化行为记忆;可与“诸葛亮决策术”“立将威信术”等单品联动,全面提升领导力体系。

3,425

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧