当前位置:首页 » 编程软件 » aspnet编译成dll

aspnet编译成dll

发布时间: 2023-03-19 08:41:46

1. 如何编译生成dll

创建银如DLL工程
这里,我们为了简要说明DLL的原理,我们决定使用最简单的编译环境VC6.0,如下图,我们先建立一个新的Win32 Dynamic-Link Library工程,名称为“MyDLL”,在Visual Studio中,你也可以通过建立Win32控制台程序,然后在“应用程碧搏亏序类型”中选择“DLL”选项,

点击确定,选择“一个空的DLL工程”,确定,完成即可。

一个简单的dll
在第一步我们建立的工程中建立一个源码文件”dllmain.cpp“,在“dllmain.cpp”中,键入如下代码

[cpp] view plain
#include <Windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain(HMODULE hMole, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("DLL_PROCESS_ATTACH\n");
break;
case DLL_THREAD_ATTACH:
printf("DLL_THREAD_ATTACH\n");
break;
case DLL_THREAD_DETACH:
printf("DLL_THREAD_DETACH\n");
break;
case DLL_PROCESS_DETACH:
printf("DLL_PROCESS_DETACH\n");
break;
}
return TRUE;
}
之后,我们直接编译,即可以在Debug文件夹下,找到我们生成的dll文件,“MyDLL.dll”,注意,代码里面的printf语句,并不是必须的,只是我们用于测试程序时使用。而DllMain函数,是dll的进入/退出函数。

实际上,让线程调用DLL的方式有两种,分别是隐式链接和显式链接,其目的均是将DLL的文件映像映射进线程的进程的地址空间。悔神我们这里只大概提一下,不做深入研究,如果感兴趣,可以去看《Window高级编程指南》的第12章内容。
隐式链接调用
隐士地链接是将DLL的文件影响映射到进程的地址空间中最常用的方法。当链接一个应用程序时,必须制定要链接的一组LIB文件。每个LIB文件中包含了DLL文件允许应用程序(或另一个DLL)调用的函数的列表。当链接器看到应用程序调用了某个DLL的LIB文件中给出的函数时,它就在生成的EXE文件映像中加入了信息,指出了包含函数的DLL文件的名称。当操作系统加载EXE文件时,系统查看EXE文件映像的内容来看要装入哪些DLL,而后试图将需要的DLL文件映像映射到进程的地址空间中。当寻找DLL时,系统在系列位置查找文件映像。

1.包含EXE映像文件的目录
2.进程的当前目录
3.Windows系统的目录
4.Windows目录
5.列在PATH环境变量中的目录

这种方法,一般都是在程序链接时控制,反映在链接器的配置上,网上大多数讲的各种库的配置,比如OPENGL或者OPENCV等,都是用的这种方法

显式链接调用
这里我们只提到两种函数,一种是加载函数
[cpp] view plain
HINSTANCE LoadLibrary(LPCTSTR lpszLibFile);

HINSTANCE LoadLibraryEx(LPCSTR lpszLibFile,HANDLE hFile,DWORD dwFlags);
返回值HINSTANCE值指出了文件映像映射的虚拟内存地址。如果DLL不能被映进程的地址空间,函数就返回NULL。你可以使用类似于

[cpp] view plain
LoadLibrary("MyDLL")
或者

[cpp] view plain
LoadLibrary("MyDLL.dll")
的方式进行调用,不带后缀和带后缀在搜索策略上有区别,这里不再详解。

显式释放DLL

在显式加载DLL后,在任意时刻可以调用FreeLibrary函数来显式地从进程的地址空间中解除该文件的映像。
[cpp] view plain
BOOL FreeLibrary(HINSTANCE hinstDll);
这里,在同一个进程中调用同一个DLL时,实际上还牵涉到一个计数的问题。这里也不在详解。
线程可以调用GetMoleHandle函数:

[cpp] view plain
GetMoleHandle(LPCTSTR lpszMoleName);
来判断一个DLL是否被映射进进程的地址空间。例如,下面的代码判断MyDLL.dll是否已被映射到进程的地址空间,如果没有,则装入它:

[cpp] view plain
HINSTANCE hinstDll;
hinstDll = GetMoleHandle("MyDLL");
if (hinstDll == NULL){
hinstDll = LoadLibrary("MyDLL");
}
实际上,还有一些函数,比如 GetMoleFileName用来获取DLL的全路径名称,FreeLibraryAndExitThread来减少DLL的使用计数并退出线程。具体内容还是参见《Window高级编程指南》的第12章内容,此文中不适合讲太多的内容以至于读者不能一下子接受。

DLL的进入与退出函数

说到这里,实际上只是讲了几个常用的函数,这一个小节才是重点。
在上面,我们看到的MyDLL的例子中,有一个DllMain函数,这就是所谓的进入/退出函数。系统在不同的时候调用此函数。这些调用主要提供信息,常常被DLL用来执行进程级或线程级的初始化和清理工作。如果你的DLL不需要这些通知,就不必再你的DLL源代码中实现此函数,例如,如果你创建的DLL只含有资源,就不必实现该函数。但如果有,则必须像我们上面的格式。
DllMain函数中的ul_reason_for_call参数指出了为什么调用该函数。该参数有4个可能值: DLL_PROCESS_ATTACH、DLL_THREAD_ATTACH、DLL_THREAD_DETACH、DLL_PROCESS_DETACH。
其中,DLL_PROCESS_ATTACH是在一个DLL首次被映射到进程的地址空间时,系统调用它的DllMain函数,传递的ul_reason_for_call参数为DLL_PROCESS_ATTACH。这只有在首次映射时发生。如果一个线程后来为已经映射进来的DLL调用LoadLibrary或LoadLibraryEx,操作系统只会增加DLL的计数,它不会再用DLL_PROCESS_ATTACH调用DLL的DllMain函数。
而DLL_PROCESS_DETACH是在DLL被从进程的地址空间解除映射时,系统调用它的DllMain函数,传递的ul_reason_for_call值为DLL_PROCESS_DETACH。我们需要注意的是,当用DLL_PROCESS_ATTACH调用DLL的DllMain函数时,如果返回FALSE,说明初始化不成功,系统仍会用DLL_PROCESS_DETACH调用DLL的DllMain。因此,必须确保没有清理那些没有成功初始化的东西。
DLL_THREAD_ATTACH:当进程中创建一个线程时,系统察看当前映射到进程的地址空间中的所有DLL文件映像,并用值DLL_THREAD_ATTACH调用所有的这些DLL的DllMain函数。该通知告诉所有的DLL去执行线程级的初始化。注意,当映射一个新的DLL时,进程中已有的几个线程在运行,系统不会为已经运行的线程用值DLL_THREAD_ATTACH调用DLL的DllMain函数。
而DLL_THREAD_DETACH,如果线程调用ExitThread来终结(如果让线程函数返回而不是调用ExitThread,系统会自动调用ExitThread),系统察看当前映射到进程空间的所有DLL文件映像,并用值DLL_THREAD_DETACH来调用所有的DLL的DllMain函数。该通知告诉所有的DLL去执行线程级的清理工作。
这里,我们需要注意的是,如果线程的终结是因为系统中的一个线程调用了TerminateThread,系统就不会再使用DLL_THREAD_DETACH来调用DLL和DllMain函数。这与TerminateProcess一样,不再万不得已时,不要使用。
下面,我们贴出《Window高级编程指南》中的两个图来说明上述四种参数的调用情况。

好的,介绍了以上的情况,下面,我们来继续实践,这次,建立一个新的空的win32控制台工程TestDLL,不再多说,代码如下:

[cpp] view plain
#include <iostream>
#include <Windows.h>
using namespace std;

DWORD WINAPI someFunction(LPVOID lpParam)
{
cout << "enter someFunction!" << endl;
Sleep(1000);
cout << "This is someFunction!" << endl;
Sleep(1000);
cout << "exit someFunction!" << endl;
return 0;
}

int main()
{
HINSTANCE hinstance = LoadLibrary("MyDLL");
if(hinstance!=NULL)
{
cout << "Load successfully!" << endl;
}else {
cout << "Load failed" << endl;
}
HANDLE hThread;
DWORD dwThreadId;

cout << "createThread before " << endl;
hThread = CreateThread(NULL,0,someFunction,NULL,0,&dwThreadId);
cout << "createThread after " << endl;
cout << endl;

Sleep(3000);

cout << "waitForSingleObject before " << endl;
WaitForSingleObject(hThread,INFINITE);
cout << "WaitForSingleObject after " << endl;
cout << endl;

FreeLibrary(hinstance);
return 0;
}

代码很好理解,但是前提是,你必须对线程有一定的概念。另外,注意,我们上面编译的获得的“MyDLL.dll"必须拷贝到能够让我们这个工程找到的地方,也就是上面我们提到的搜索路径中的一个地方。
这里,我们先贴结果,当然,这只是在我机器上其中某次运行结果。

有了上面我们介绍的知识,这个就不是很难理解,主进程在调用LoadLibrary时,用DLL_PROCESS_ATTACH调用了DllMain函数,而线程创建时,用DLL_THREAD_ATTACH调用了DllMain函数,而由于主线程和子线程并行的原因,可能输出的时候会有打断。但是,这样反而能让我们更清楚的理解程序。

2. 在怎样情况下把代码编译成dll文件

如果使用的是VS,可以进行如下操作:
打开VS, 文件-新建-新建项目-其他语言-Visual C++ - Win32 控制台应用程序。
单击确定后,弹出对话框,按照对话框“下一步”提示进行操作。
将要编译的C文件拷贝到CreateDLL项目中,.h文件就放到头文件夹的目录下,.c文件放到源文件目录下,注意后缀名为.c的文件都要改成.cpp,否则编译会出错。
注意:申明函数时必须参照上图红框标示出来的规则,在Function.cpp文件中必须要引入对应的#include CreateDLL.h。
选中所有需要编译成dll的cpp文件,右键-属性-预编译头-不使用预编译头,然后选择 “生成”即可,这样在项目的Debug文件夹下面便可找到CreateDLL.dll文件

3. 在asp中,加prepared=true的话会把信息编译,请问是编译成dll吗

肯定不是编译为dll,可能是编译为机器能懂的语言

4. 在asp.net中aspnet_filter.dll文件和aspnet_isapi.dll文件的作用各是什么

aspnet_filter.dll 的作用是保护安者脊全,比如WebSite中的App_Code文件夹,还有用户不能访问代码文件或配置文件等等。

aspnet_isapi.dll 当用户请求一个aspx文件时,IIS会把这个请求交给.NET framework处理,fw会解析反射调用你写好的cs代码,然后在把返回的数据交给IIS,你可以在IIS的网站首游渗上右键属性-主目录磨汪-配置-映射 里面找 扩展名.aspx 文件被映射到aspnet_isapi.dll上。

5. 如何编译生成dll

使用VC下的cl和link手工创建dll并实现函数导入

1、创建dll头文件:
/*
* dllmain.h
*/
#ifndef _DLLMAIN_H
#define _DLLMAIN_H

int getNumber();

#endif

2、创建dll源文件:
/*
* dllmain.c
*/
#include "dllmain.h"

int getNumber()
{
return 10;
}

3、 创建def文件:
; export.def
LIBRARY MY_DLLMAIN ; MY_DLLMAIN 将成为生成的dll的名称
EXPORTS
getNumber @1 ; 这个名称即为函数的实际导出名称 @1为函数的导出编号

4、生成dll文件:
cl dllmain.c /c
link /def:export.def /dll dllmain.obj

这时,工程中已经包含了 dllmain.h dllmain.c export.def dllmain.obj dllmain.lib dllmain.exp MY_DLLMAIN.dll 其中,后4个文件是编译链接过程中生成的文件

5、创建dlltest.c:
/*
* dlltest.c
*/
#include <stdio.h>
#include "dllmain.h" //dll库的头文件

#pragma comment(lib,"dllmain.lib") //dllmain.lib即是上一步生成的文件

int main()
{
printf("%dn",getNumber());
}

6、编译、链接dlltest.c
cl dlltest.c /c
link dlltest.obj

注意:这里dllmain.lib和dllmain.h应该和dlltest.c在同一个目录中。此步的结果将生成 dlltest.exe

7、运行:
dlltest

这时,系统将载入my_dllmain.dll这个动态链接库,将调用其中的getNubmer函数。

6. c#如何将类库输出成dll

把你写好的类库编译一下就可以搜隐生成dll了,生成的dll在bin/debug文件夹下,dll的名字和世桐厅你类库的名字是一样的。
前提是你新建项目的时候记得选择“类轮销库”类型,不要选成winfrom,web什么的了。

7. ASP.NET常见错误大全

检测到有潜在危险的 Request Form 值

原因:

( )在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置

( )HTML里面写了轿烂旅两个<form>引起

解决:

方案一 在 aspx文件头中加入这句 <%@ Page validateRequest= false %>

方案二 修改nfig文件:

<configuration>

<system web>

<pages validateRequest= false />

</system web>

</configuration>

因为validateRequest默认值为true 只要设为false即可

在没有任何数据时进行无效的读取尝试 解决办法

原因

所返回的sqldatareader无数据记录 但没有作记录判断力处理 返回的是空值

加上判断即可 if (reader read()) { TextName Text =

reader[ FieldName ] ToString(); }

数据为空 不能对空值调用此方法或属性

原因:

若对象是null 那么调用对象的方法例如ToString()肯定出错一般是数历宴据库字段的值为空

在grideview等闭凳数据控件常出现

解决:因此建议作NULL处理

阅读器关闭时 FieldCount 的尝试无效

原因:

使用了SqlDataReader来绑定数据后 将connection对象作了Close()处理

类似

public SqlDataReader GetSomething()

{

conn open();

SqlDataReader reader =

sqlcmd ExcecutReader(CommandBehavior CloseConnection));

conn close();// occur error here

return reader;

}

在绑定的时候调用了这个方法来指定数据源 如果使用这个方法则需要在调用函数中关闭Re

ader这样conn就可以自动关闭

如果是使用的是SqlDataAdapter和DataSet那么请去掉显式关闭conn的调用 或者在finally

中调用之

未能映射路径

原因:可能是在webconfig中的路径配置不正确所致 在FCKEditor的配置中这种问题比较突出

<add key= FCKeditor:BasePath value= ~/admin/fckeditor/ />

<add key= FCKeditor:UserFilesPath value= /UserFiles/ />

Unreachable code detected

原因

一般是在异常处理理或返回值时使用了 throw 或return 可能是其位置放在前面 造成后面的代码执行到了

解决

把相关的异常抛出处理的语句(throw)或return 的语句放到代理执行的最后一行

索引超出范围 必须为非负值并小于集合大小

原因

( ) 没有设置DATAKEYFIELD设为数据库中相对应的唯一字段(一般是主键)

( ) DataGrid Columns > e Item Cells

解决

( ) 设置datakeyfield

( ) 加入判断语句unt (datagrid可以是其它相类似的服务器控件)

数据源不支持服务器端的数据分页

解决方法:

不要使用DataReader 改成使用DataSet 或使用自定义分页形式 不采用提供的分页功能

OleDbDataAdapter da = new OleDbDataAdapter(sql connection);

DataSet ds = new DataSet();

da Fill(ds News );

GridView DataSource = ds ;

GridView DataBind();

对象名 ***** 无效

原因:当前使用的数据库中没有*****这张表

解决: 查看是否程序中是否写错了所调用的表的名称或看一下SQL数据库中是否存在你所调用的表

在建立与服务器的连接时出错 在连接到 SQL Server 时 在默认的设置下 SQL

Server 不允许进行远程连接可能会导致此失败 (provider: 命名管道提供程序

error: 无法打开到 SQL Server 的连接)

solution: 主机上需要用固定的IP地址或服务器地址

SqlDateTime 溢出 必须介于 / / : : AM 和 / / : : PM

之间

出现这种问题``多半是因为你更新数据库时``datetime字段值为空``默认插入 年 月

日``造成datetime类型溢出

出现 表示 属性 此处应为 方法

原因:

VB与c#的方法 属性的格式有所不一样导致

可能是在design中绑定数据的语法出现错误 解决: 记住属性用[] 方法用()

记住绑定数据的正确语法(有以下几种方式::<%Container DataItem( 字段名 )%> <%

#Eval( 字段名 )%> <%Bind( 字段名 )%>等)

未能从程序集 DAL Version= Culture=neutral

PublicKeyToken=null 中加载类型 DAL SqlHelper

原因:修改了其他层后未能重新编译成dll

解决:编译一下(Rebuild)

为过程或函数 指定的参数太多

solution:调用存储过程与定义的存储过程所用的参数数量或所执行的SQL语句中所传入的参

数个数不一致(这是个SQL的错误)

解决方案:仔细检查在存储过程中所设定的参数变量 与实际输入的参数值是否一一对应

无法启动调试 绑定句柄无效

原因:系统的Terminal Services没有开启

Unable to debugging on the web server Debug failed because integrated windows authentication is not enable

解决方法:

打开vs >工具(Tools) >选项(Option) >调试(debugging) >编辑并继续(Edit and Continue) >全部打勾

Automation 操作中文件名或类名未找到: RegExp

解决方法:regsvr vbscript dll

System NullReferenceException: 未将对象引用设置到对象的实例

原因:

( )所设置的变量为空值或没有取到值 一般出现在传递参数的时候出现这个问题 也会在使用datagrid或gridview或datalist等数据控件时出现

( )控件名称与codebehind里面的没有对应

( )未用new初始化对象

( )在程序中所引用的控件不存在

解决方法:

( )使用try catch finally捕捉错误 或直接用response write()输出所取的变量值

( )查看代码中是否存在未初始化的变量

错误 文件被数字签名策略拒绝(安装vs sp 时)解决方法:

( ) 单击 开始 单击 运行 键入 control admintools 然后单击 确定

( ) 双击 本地安全策略

( ) 单击 软件限制策略 (注意 如果未列出软件限制 请右击 软件限制策略 然后单击 新建策略 )

( ) 在 对象类型 下 双击 强制

( ) 单击 除本地管理员以外的所有用户 然后单击 确定

( ) 重新启动计算机

微软说明

vs 不能从源文件模式切换到视图模式

解决方法:dos下运行下 devenv /resetskippkgs (win+r cmd)

Validation of viewstate MAC failed

解决办法:页面的顶部page加 EnableViewState= False EnableViewStateMac = False 来解决这个问题

Automation server can t create object (Automation 服务器不能创建)

解决办法:运行: Regsvr scrrun dll 即可

包加载失败

未能正确加载包 Visual Web Developer Trident Designer Package (GUID =

{ AE E C D E F A AEFF }

解决方法:

设置系统变量 VsLogActivity=

在%APPDATA%MicrosoftVisualStudio 文件夹下创建文件ActivityLog xml

Error

Microsoft Visual Studio

LoadLibrary failed for package [Visual Web Developer Trident Designer Package]

{ AE E B C D E F A AEFF }

e

c:Program FilesMicrosoft Visual Studio Common Packages ridsn dll

从 WINNTMicroSoft NETFrameworkv xxx 复制文件gdiplus dll 到 Program FilesVisual Studio Common Packages文件夹下

在命令行下运行命令 devenv /resetskippkgs

Error spawning cmd exe

解决方案:把cmd exe 拷贝到VS安装目录下的VC/BIN目录里 可以解决问题

尝试读取或写入受保护的内存

解决:硬件有问题 一般内存有问题

无法在证书存储区中找到清单签名证书

解决方法:用记事本打开项目的 csproj文件 删除类似

该项目中不存在目标 ResolveKeySource

原因:这个问题很罕见 查询国外相关资料后 大致说是由于部署的不是一个标准的solution 需要在VS自带的命令提示中运行下面这个东西恢复

解决方法:

( ) 将下列代码存为XML文件 命名为TestBuild xml

<Project DefaultTargets= Build xmlns= >

<PropertyGroup>

<TargetConnectionString>Data Source= sql % BUser ID=SqlUser% BPooling=False% BPassword=X</TargetConnectionString>

</PropertyGroup>

<ItemGroup>

<DatabaseProject Include= Database Database dbproj />

<DatabaseProject Include= Database Database dbproj />

</ItemGroup>

<Target Name= BuildAllDatabaseProjects >

<MSBuild

Properties= TargetConnectionString=$(TargetConnectionString)

Projects= @(DatabaseProject)

Targets= Build;Deploy >

</MSBuild>

</Target>

( )在命令提示中运行:m *** uild /t:BuildAllDatabaseProjects TestBuild xml

</Project>

不能将值 NULL 插入列 **

原因:这是数据库表设计的错误 所涉及的表的字段中设置了不能为空的属性 但是传入的值为null 所以报错

解决方法:查看是否所传入的值是否为Null 或修改数据库中表的所对应的列的属性

未能加载类型 命名空间 类

原因:

( )项目修改后没有进行编译

( )项目中原有的命名空间可能被修改了

( )项目中所需要的ascx或其他页面不存在 或不包含在项目中

解决方法:

( )在修改完成之后 请重新生成或编译整个项目或解决方案

( )手工修改所改动的命名空间 注意名称的大小写 再重新编译

( )将相关的文件包含在项目中

不能访问只读文件 **** ***

解决方案:

给虚拟目录所对应的文件加上 Everyone/写入 权限即可

请求因 HTTP 状态 失败 Access Denied解决方法:在iis信息服务器上把匿名访问和允许iis控制密码给勾上

有一个无效 SelectedValue 因为它不在项目列表中

原因

( )在没有绑DropDownList之前就给DropDownList SelectedValue 赋值

( )dropdownlist中出现了null值

无法在 已存在的情况下创建/影像复制该文件

解决方案 重新编译项目(多个project全部重新编译) 关闭vs 重新打开 必要时重新启动机子

用户 CASPNET 登录失败登录失败

异常详细信息: System Data SqlClient SqlException: 用户 COOASPNET 登录失败

这是怎么回事啊?

因为你的程序连接SQLServer的连接字符串是用了windows集成登陆 你可以改成用数据库帐号密码登陆 连接字符串的写法是

server=localhost;uid=sa;pwd=xxxx;database=master;

server是数据库服务器的机器名或者IP 如果是同一台机可以用localhost

uid是数据库登陆帐号

pwd是数据库密码

database是数据库初始owner名称

答案

右击桌面我的电脑 选择 管理 双击打开的 计算机管理 对话框中的 本地用户和组 下的 组 在右边的窗口中双击 Remote Desktop Users 组 在打开的 Remote Desktop Users 属性对话框中 单击添加 在打开的 添加用户 对话框中单击 高级 再单击 立即查找 按钮 在 搜索 结果中 双击ASPNET(如果是IIS NEOR SERVERCE )再点击两次确定完成添加 用户

单击 开始 所有程序 Microsoft SQL Server 企业管理器 在打开的 控制台根目录 选择相应的数据库 右击该数据库的中的 用户 选择 新建数据库用户 在 新建用户 对话 框中点击 登陆名 右侧的下拉列表框 选择 新建 打开 新建登陆对话框 点击名称右侧的 省略号按钮 在打开的对话框中将 列出的名称 中选择 本机的名称 再在下面的名称框中选定 Remote Desktop Users 然后点击 成员 按钮 双击 ASPNET(如果是IIS NEOR SERVERCE ) 然后点击确定 在 新建登陆对话 框 中的默认设置的 数据库 选项中选择相应的数据库名称 再在 数据库访问 选项下勾选相应 的数据库点击确定 完成将默认的匿名用户添加到SQL

用户 nt authority eork service 登录失败

> sqlserver 调成sql server 和windows验证模式

>

(以下方法仅供参考)

第一步 把 NT AUTHORITYNEORK SERVICE 添加到Administrator组中

我的电脑 >右键 >管理 >本地用户和组

选择 组 >双击Administrators >单击 添加 >单击 高级 >单击 立即查找 >在下面的列表中选择Neork Service用户 >两次单击 确定 >加入

第二步 在企业管理器中加入NetWord Service用户

打开Sql Server企业管理器 >选择数据库实例 >打开 安全性 节点 >选择 登录 >在右边的列表中单击右键 >选择 新建登录 >在 常规 选项卡中单击 名称 旁边的按钮 >选择 Administrators 组 >单击下面的 成员 按钮 >选择 Neork Service >单击 添加 按钮 >单击 确定 返回 新建登录 对话框 >保证身份验证类型为 windows验证 和 允许访问 >单击 确定 >关闭 企业管理器

第三步

重新运行程序 数据库连接字符串选择windows验证即可

> 在sqlserver中添加帐户或IIS_WPG工作组

此方法来自于

未能加载视图状态 正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配 例如 当以动态方式添加控件时 在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配

原因 viewstate的在作用是将控件的状态保存 在下次Post给服务器 服务器进行恢复控件的状态 (控件的状态包括 值和事件 )

解决方法

( )每一个UserControl的viewstate都改为false

( )加入这个

this Page EnableViewState = false;

此方法来源于 _astar/archive/ / / /l

由于启动用户实例的进程时出错 导致无法生成 SQL Server 的用户实例 该连接将关闭

问题原因

这是微软的bug 并且微软已经承认 详情如下

出现此错误的条件是 你用过远程桌面连接 并且安装了SQL +VS 就有很大可能触发这个问题 微软说会在将来的XP SP 里面解决掉这个问题

解决

ID= &SiteID=

如果你看不懂英文 那么我告诉你我的解决办法

删除C:Documents and Settings[USERNAME]Local SettingsApplication DataMicrosoftMicrosoft SQL Server DataSQLEXPRESS目录即可 [USERNAME]是Windows用户名 比如说Administrator

此问题来于

Server Application Unavailable

The web application you are attempting to access on this web server is currently unavailable Please hit the Refresh button in your web browser to retry your request

Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server Please review this log entry to discover what caused this error to occur

解决

如果你运行WinXP/IIS 为了给ASPNET工作进程访问你的web工程文件夹的权力请到网站文件所在的目录 右键一级文件夹 选Security-Add-键入 ASPNET 点击OK或点击Check Names 如果弹出对话框提示 Name not Found 则应点击Locations改变位置到本机计算机名 点击OK 分配此用户权限为 Full Control 点击OK

错误变为

You are not authorized to view this page

You do not have permission to view this directory or page using the credentials you supplied

解决

在IIS里右键此虚拟目录-Properties-Directory Security-Edit 勾选上Integrated Windows authentication即可

超时时间已到 超时时间已到 但是尚未从池中获取连接 出现这种情况可能是因为所有池连接均在使用 并且达到了最大池大小

可能原因如下 并发操作 Connection用后没有关闭 或者因为DataReader连接独占连接

解决方法

修改几个关键页面或访问比较频繁的数据库访问操作 使用DataAdapter和DataSet来获取数据库数据 不要使用DataReader

在访问数据库的页面上使用数据缓存 如果页面的数据不是经常更新(几分钟更新一次)的话 使用Cache对象可以不用访问数据库而使用缓存中的内容 那么可以大大减少连接数量

修改代码 把使用Connection对象的地方都在Close()后面加上Dispose()调用

建议对数据库操作进行大的修改 建立自己的数据库操作代理类 继承System IDisposable接口 强迫释放资源 这样就不会出现连接数量不够的问题了

包加载失败

未能正确加载包 Visual Web Developer Trident Designer Package (GUID =

{ AE E C D E F A AEFF } 请与包供应商联系以获得帮助 由于可能会发生环境损坏 建议重新启动应用程序 要禁止将来将来加载此包吗?可以使用 devenv reswetskippkgs 重新启用包加载

每次开机打开vs 都会有这个提示 烦

于是在google了一下 发现很多方法都试过了 只有一个解决一试就行

解决方法如下:

设置系统变量 VsLogActivity=

在%APPDATA%MicrosoftVisualStudio 文件夹下创建文件ActivityLog xml

从 WINNTMicroSoft NETFrameworkv xxx 复制文件gdiplus dll 到 Program FilesVisual Studio Common Packages文件夹下

在命令行下运行命令 devenv /resetskippkgs

注:发现此问题只有在win 会出现 win 就不会出现这个问题

用户 xxxASPNET登录失败

第一步

把 NT AUTHORITY NetWORK SERVICE 添加到Administrator组中

我的电脑 >右键 >管理 >本地用户和组

选择 组 >双击Administrators >单击 添加 >单击 高级 >单击 立即查找 >在下面的列表中选 Neork Service用户 >两次单击 确定 >加入

第二步 在企业管理器中加 Neork Service用户

打开Sql Server企业管理器 >选择数据库实例 >打开 安全性 节点 >选择 登录 >在右边的列表中单击右键 >选择 新建登录 >在 常规 选项卡中单击 名称 旁边的按钮 >选择 Administrators 组 >单击下面的 成员 按钮 >选择 Neork Service >单击 添加 按钮 >单击 确定 返回 新建登录 对话框 >保证身份验证类型为 windows验证 和 允许访问 >单击 确定 >关闭 企业管理器

第三步

重新运行asp Net程序 数据库连接字符串选择windows验证即可

以上针对win 如果是win 加ASp Net用户

无法在 已存在的情况下创建/影像复制该文件

解决方法 重新编译整个项目 或者重启电脑

Could not create an environment: OCIEnvCreate returned

解决方案一

主要是将oracle主目录oracle的读写权限赋予或者是IUSER_ 和IWAM_ 重启计算机

解决二:

打开在IIS中的WEB属性--主目录--执行权限【改为-脚本和可执行文件】

-应用程序池【改为-MSSharePointAppPool】 刷新OK

解决三:

文件夹权限可以不用管

设置ORACLE_HOME变量的方法如下

控制面板>>系统>>高级>>环境变量>>系统变量>>新建系统变量

变量名写ORACLE_HOME

变量值添实际的ORACLE_HOME路径 在注册表中有

由于目标机器积极拒绝 无法连接

在添加完引用后 用localhost替换掉所有的localhost: 重新编译

能加载视图状态 正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配 例如 当以动态方式添加控件时 在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配

解决 在页面的 Page 项添加 EnableViewState= false 即可

在以下方法或属性之间的调用不明确 method 和 method

因隐式转换的缘故 编译器无法调用重载方法的某种形式 可以用以下方法纠正该错误

以不发生隐式转换的方式指定此方法的参数

移除此方法的所有重载

在调用方法之前 强制转换到正确的类型

在应用程序级别以外使用注册为 allowDefinition= MachineToApplication

解决 在网站对应的虚拟目录上右键 选属性 然后在应用程序名后点创建 名字随便填

[子目录不会继承上级的属性 所以要将aspx文件所在的目录属性设置正确]

无法识别的配置节 connectionStrings

原因

用vs 开发的应用程序需要使 framework 而在iis中的默环境是 这时将发生不可识别的节点的问题

解决办法

环境升级为 开始-》运行-》cmd-》

C:WINDOWSMicrosoft NETFrameworkv aspnet_regiis exe i

Timeout expired The timeout period elapsed prior to obtaining a connection from the pool This may have occurred because all pooled connections were in use and max pool size was reached

Description: An unhandled exception occurred ring the execution of the current web request Please review the stack trace for more information about the error and where it originated in the code

Exception Details: System InvalidOperationException: Timeout expired The timeout period elapsed prior to obtaining a connection from the pool This may have occurred because all pooled connections were in use and max pool size was reached

主要原因可能有

使用了连接池 大量的sqlconnection用了后忘记关闸门 导致SQL占用严重 可以用 exec sp_who 这个存储过程查看一下

连接池的连接数有所限制

解决方法:

释放连接池 调用Connection对象的Close()方法关闭数据库连接

利用try catch finally对数据库连接进行异常处理 当无法连接数据库时将抛出异常 并显示出错信息 见catch代码块所示 在此程序中 无论是否发生异常 都可以通过finally区块关闭数据库的连接 从而节省计算机资源

将SqlConnection对象包含到using区块中 这样程序会自动调用Dispose()方法释放SqlConnection对象所占用的系统资源 无需再使用SqlConnection对象的Close()方法

指定min pool size表示连接池允许的最小连接数(默认为 ) 下面的代码指定了SqlConnection对象的max pool size为 min pool size为

lishixin/Article/program/net/201311/11175

8. c#.net怎么将自定义控件的.cs文件编译成.dll控件

(一).用户控件和自定义控件概述
用户控件(UserControl): 扩展名为*.ascx,跟*.aspx在结构上相似,是指页面中
加载的功能块,只是用户控件不能单独作为页面运行,必须嵌入到*.aspx页面或其它用
户控件中使用.
自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里
面,直接用鼠标拖动使用.(二).使用在一个大系统中,有时候会只能几个*.aspx页面,其余的都是做成*.ascx页面,
这样可以增强页面之间的藕合性,一个用户控件*.ascx都作为一个独立的功能块.
自定义控件是指编译后直接可以放到工具箱中用,就像TextBox,DataGrid一样
在设计器中可以用鼠标拖动到页面上使用.
自定义服务器控件分为两种:
1.一种是用*.aspx代码和*.cs代码编译后生成DLL,再添加引用到工具箱使用.
一般用于WebForm中.
2.另一种是只用*.cs实现,再编译生成DLL,添加到工具箱使用.
一般用于WinForm中.
自定义控件生成步骤:比如:
1. 将一个Button从设计器拖到页面中,
对按钮大小,颜色或文本设置一个固定值,保存文件名为: a.cs
2. csc /r:System.dll /t:library/out:..\..\A.dll a.cs
3. 右击工具箱空白处,弹出右击菜单后,选“添加移除项”,将刚生成的DLL

9. ASP.NET如何将ASCX文件编译成DLL文件然后再工具箱中可以添加进去的

在工具栏 空白的地方右键,选择“添加选项卡”,然后给选项卡起个名字。例如叫做ExtAspNet,然后右键刚添加的那个选项卡,选择右键菜单中的“选择项”,在弹出窗口中,点击下边的“浏览”按钮去找到你要添加的控件的dll,然后确定。理论上讲,最简单的配置就已经完成了。不过大多数下载的第三方控件还需要对web.config文件进行配置。这个视情况而定

10. ASP封装成DLL以后怎么能反编译回来

目前,还没有确实可行的方法
最多只能反编译为
汇编语言

热点内容
php办公系统 发布:2025-07-19 03:06:35 浏览:900
奥德赛买什么配置出去改装 发布:2025-07-19 02:53:18 浏览:42
请与网络管理员联系请求访问权限 发布:2025-07-19 02:37:34 浏览:189
ipad上b站缓存视频怎么下载 发布:2025-07-19 02:32:17 浏览:844
phpcgi与phpfpm 发布:2025-07-19 02:05:19 浏览:527
捷达方向机安全登录密码是多少 发布:2025-07-19 00:57:37 浏览:693
夜魔迅雷下载ftp 发布:2025-07-19 00:39:29 浏览:99
增值税票安全接入服务器地址 发布:2025-07-19 00:20:45 浏览:486
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:823
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:630