Tag Archives: asp

CS0013 or CS0016 Compilation Errors in ASP.NET Web Applications

SYMPTOMS
When you view a Microsoft ASP.NET Application in a Web browser, you may receive the following error messages:

For the Microsoft .NET Framework version 1.1, the error message is the following:

CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary
ASP.NET Files\application1\c11b43f6\cf3ec03\rizcntet.dll’ . The directory name is invalid.

For the .NET Framework 1.0, the error message is the following:

CS0013: Unexpected error writing metadata to file
‘C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\Temporary ASP.NET Files\application2\3fc72f26\eb731247\ev2bslce.dll’.
The directory name is invalid.

CAUSE
The system TEMP and TMP variables point to a folder that does not exist.

The compiler generates temporary files in the folder where the TEMP and the TMP variables point to before the files are copied to the Temporary ASP.NET Files folder. However, the folder where the system variables point to is deleted when you restart the computer. Therefore, the compiler cannot generate the temporary files.

RESOLUTION

  1. Create a temporary folder under %Systemroot%, and then name it Temp.
  2. Grant full permissions on the Temp folder to the aspnet user account in .NET Framework 1.0 or to the NETWORK SERVICE user account in .NET Framework 1.1.
  3. Right-click My Computer, and then click Properties.
  4. On the Advanced tab, click Environment Variables.
  5. Select the TEMP variable under System variables, and then click Edit.
  6. Type %SystemRoot%\TEMP in the Variable Value box, and then click OK.
  7. Repeat steps 5 and 6 to edit the TMP variable. Click OK two times.
  8. Click Start, and then click Run.
  9. To reset Internet Information Services (IIS), type iisreset on the command prompt.

Note If the error message that is mentioned in the “Symptoms” section of this article persists, restart the computer.

MORE INFORMATION
Steps to Reproduce the Behavior

  1. Start Microsoft Visual Studio .NET.
  2. Create a new ASP.NET Web Application project by using Microsoft Visual C# .NET or Microsoft Visual Basic .NET, and then name the project CompileTest.
  3. On the Build menu, click Build Solution.
  4. Right-click My Computer, and then click Properties.
  5. On the Advanced tab, click Environment Variables.
  6. Select the TEMP variable under System variables,
    and then click Edit.
  7. Type %SystemRoot%\TEMP1 in the Variable Value box to point to the nonexistent TEMP1 folder, and then click OK.
  8. 8.Repeat steps 6 and 7 to edit the TMP variable to point to the nonexistent TEMP1 folder.
  9. 9.Click OK two times.
  10. 10.To notice one of the error messages that are mentioned in the “Symptoms” section of this article, visit the following URL: http://localhost/CompileTest/WebForm1.aspx

ASP.NET Starter Kit

微软的东西使得程序员的工作变得越来越轻松,当然同时也使得靠吃程序员这碗饭过活的人日子越来越难过了。最近我在微软 MSDN 中文网站上又发现了新东西(当然对于经常关注微软动态,且经常浏览微软几大英文门户的人们来说,这也许算是老掉牙的东西了),一套开放源代码的、完全免费的且说不好具有什么种类版权的门户网站入门套件: ASP.NET Starter Kit 。据说如果你有足够的实力,经过重写的源代码甚至是可以直接拿出来卖钱的。(怎么越看越像 BSD 版权呢?)有这么好的东西,怎么能不尝试一下呢?以下就是我对 ASP.NET Starter Kit 体验的随笔。

一、什么是 ASP.NET Starter Kit
关于这个问题我是无法给出什么权威性的解释的,但是现如今像这样的东西满网络里到处都是,大家肯定也不会陌生,只不过她系出名门,由微软的牛人们写出来的,地位自然显赫得多了。不要简单的望文生义,以为这套东西是为初学者准备的,虽然我还没有看到那里,但据说这个套件里的各个部分都使用了看起来令人兴奋的设计模式,绝对是学习和使用的不二之选。

本套件包含五个部分, Portal Starter Kit (门户网站入门套件), Commerce Starter Kit (电子商务入门套件), Reports Starter Kit (报表产生入门套件), TimeTracker Starter Kit (项目追踪入门套件) 和 Community Starter Kit (论坛入门套件)。每一个部分都可以直接拿过来部署,也可以经过自己的定制,重新发布。据说已经有几个网站开始采用该套件中的 Portal 部分部署自己的门户网站,相应的内容大家可以到微软的网站上找到。

二、如何获得 ASP.NET Starter Kit
当然是在微软的网站上,英文版的可以到以下网址找到: http://www.asp.net/default.aspx?tabindex=9&tabid=47 , 而中文版的可以到 MSDN 中文网站上去下载。

三、ASP.NET Starter Kit的版权声明
随着 ASP.NET Starter Kit 的分发,微软也同时也分发了该套件的版权声明,在 EULA.rtf 文档中,如果真的有人想要用它做些什么东西的话,最好还是好好看一看。我粗略的看了一下,怎么看怎么像 BSD 版权,包括什么必须保留微软版权、不允许加入其它的有版权产品,不允许使用微软的标志等等。

四、ASP.NET Starter Kit主要部分介绍
由于本人也是刚刚开始接触这个东西,加之目前有一个项目恰好可以用它来改,所以我首先选择了门户部分作为学习的突破口。

4.1 ASP.NET Portal
4.1.1 安装
据文档中说,该套件应该包含一个 .exe 或 .msi 的安装程序,不幸的是我在相应的 Setup 目录下没有找到这样的程序(很可能是我找到的这个发布包有问题),所以只好用功能强大的,但是相对难使的命令行工具。在 Setup 目录下可以找到 Cmd Installer 目录,进到里面就会看到 PRTL.exe 的命令行安装程序、两个写好的用于本地和远程安装的示例批处理文件 LocalFullInstall.bat 和 RemoteFullInstall.bat 、用于安装数据库的数据库脚本和 PRTL.exe 安装程序的用户文档。根据该用户文档,PRTL命令的参数如下:

4.1.1.1 INSTALL_OPTION
用于设定安装模式,有四个选项:

FULL 既安装 Web 又安装数据库。启用此选项需要提供所有的必选参数。
DB 仅安装指定的数据库实例。启用此选项需要提供 DB_FILES_DIR, DB_SERVER, DB_NAME, DB_OWNER_LOGIN, DB_OWNER_PWD, SQL_ADMIN_USER, SQL_ADMIN_PWD参数。
WEB 仅安装Web组件。启用此选项需要提供WEB_FILES_DIR, TARGET_DIR, IIS_SERVER, WEB_SITE, VDIR, DB_CONNECTION, DB_NAME, DB_SERVER, DB_OWNER_LOGIN, DB_OWNER_PWD 参数。
COPY_ONLY 仅将 WEB_FILES_DIR 目录下的所有内容拷贝到 IIS_SERVER 机器上的 TARGET_DIR目录下。启用此选项需要提供 IIS_SERVER, WEB_FILES_DIR, TARGET_DIR 参数。
4.1.1.2 WEB_FILES_DIR
待安装的 Web 页面所在的相对或绝对路径。一般在你解开的压缩包里会有一个名为 PortalCSVS (如果是 VB 工程的话似乎就应该叫 PortalVBVS )的目录,此下的文件就是所谓的待安装的 Web 页面。

4.1.1.3 DB_FILES_DIR
数据库脚本所在的相对或绝对路径。在 PRTL.exe 文件所在的目录里面有一个名为 SQL Scripts 的目录,它就是数据库脚本所在的目录。其中有四个 SQL 脚本文件。

4.1.1.4 TARGET_DIR
WEB_FILES_DIR 目录下的内容将要被拷贝到的目标路径(相对或绝对均可)。在该目标路径下 PRTL 会创建一个子目录。

4.1.1.5 IIS_SERVER
安装有 IIS 的机器的计算机名。同时该计算机也是 TARGET_DIR 所在的计算机。

4.1.1.6 WEB_SITE
一个已经存在的 Web 站点, VDIR 参数指定的虚拟目录将会在该站点中创建。此参数应该提供站点属性中描述栏中的内容。例如默认网站。

4.1.1.7 VDIR
将要安装的门户网站所在的虚拟目录的名字。建议该名称最好叫做 PortalCSVS (即与 分发包中 Web 页面内容所在的那个目录名相同,因为当用 VS.net 打开工程的时候,会默认到名称为 PortalCSVS 的虚拟目录下寻找站点)。

4.1.1.8 DB_CONNECTION
门户应用程序连接数据库的方式。只能使用SQL选项, Windows 集成认证是不支持的。

4.1.1.9 DB_SERVER
安装有 SQL Server 数据库的机器的计算机名。

4.1.1.10 DB_NAME
SQL Server 中将要安装所有数据库对象的数据库名称。(不是数据库服务器实例的名称。)

4.1.1.11 DB_OWNER_LOGIN
将要具有该数据库 Owner 角色的登陆名。如果该登陆名不存在,则会被创建。

4.1.1.12 DB_OWNER_PWD
登陆名的密码。

4.1.1.13 SQL_ADMIN_USER
具有可以创建数据库实例和用户权限的 SQL 用户名。

4.1.1.14 SQL_ADMIN_PWD
该用户的密码。

4.1.1.15 LOG_FILE (Optional)
安装日志的文件名。可以提供希望存储该日志的完整路径。如果没有提供该参数,日志文件将会被创建到同PRTL.exe相同的目录下。

例如在我的机器上,安装命令如下:
PRTL.exe INSTALL_OPTION=FULL WEB_FILES_DIR=”..\..\PortalCSVS” DB_FILES_DIR=”SQL Scripts” TARGET_DIR=”C:\inetput\wwwroot\portal” IIS_SERVER=”localhost” WEB_SITE=”默认网站” VDIR=”PortalCSVS” DB_CONNECTION=SQL DB_SERVER=”localhost” DB_NAME=”Portal” DB_OWNER_LOGIN=”PortalAdmin” DB_OWNER_PWD=”123″ SQL_ADMIN_USER=”SA” SQL_ADMIN_PWD=”sa” LOG_FILE=”installLog.txt”

生成的安装日志内容如下:
[2004-07-10 15:03:46] Setup Initialized …
[2004-07-10 15:03:46] Start Installing Web Components …
[2004-07-10 15:03:46] Copying web files from H:\Documents and Settings\MyUserProfile\My Documents\Visual Studio Projects\ASP.NET Portal (CSVS)\PortalCSVS to C:\inetput\wwwroot\portal\PortalCSVS
[2004-07-10 15:03:47] Updating web.config…
[2004-07-10 15:03:47] Updating EditHtml.aspx…
[2004-07-10 15:03:47] Creating Virtual Directory: PortalCSVS, on PASTHERO
[2004-07-10 15:03:48] Start Installing Database: localhost.Portal …
[2004-07-10 15:03:48] Executing SQL Script: 8b21cd7e-006f-4f09-8016-7a26f8dfd412CreateDB.sql
[2004-07-10 15:03:50] Executing SQL Script: f241dac2-1e7e-4e70-80ab-49e5ad575e98CreateDBObjects.sql
[2004-07-10 15:03:52] Executing SQL Script: c51bb364-0d31-4c67-9813-747f3ad813cfGrantPermission.sql
[2004-07-10 15:03:52] Executing SQL Script: 2f166c1a-ef9a-4422-841e-63026f5f13f2LoadData.sql
[2004-07-10 15:03:54] Setup Completed!