《CLR Via C# 第3版》笔记之(二) - 响应文件-阿里云开发者社区

开发者社区> 开发与运维> 正文

《CLR Via C# 第3版》笔记之(二) - 响应文件

简介:

主要内容:

  1. 默认的响应文件
  2. 自定义响应文件

1. 默认的响应文件

.net在编译的时候会引用很多其他的程序集,最基本的比如System.dll,System.core.dll等等。

我们通过命令行编译的c#程序的时候并没有指定关联这些dll,那么它们是怎么关联的呢?

首先,新建一个Program.cs文件,内容如下(只引用了System):

1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
namespace CLRViaCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("CLR via c#");
        }
    }
}

然后在命令行中编译此文件并运行。

D:\>csc /t:exe /out:p1.exe Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\>p1.exe
CLR via c#

D:\>csc /t:exe /out:p2.exe /r:System.dll  Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\>p2.exe
CLR via c#

从上面可以看出,无论是否引用System.dll,Program.cs都能正确编译并运行。

原来csc.exe在编译时会读取csc.exe所在文件夹里的文件csc.rep,即响应文件。

此响应文件中导入了一些常用的dll,所以我们编译时不用再引入了。

csc.rep的位置:C:\Windows\Microsoft.NET\Framework64\v4.0.30319

2. 自定义响应文件

如果引用了响应文件中不包含的dll(比如Microsoft.Build.dll),不指定 /r: 选项的话就无法编译。

将Program.cs改为如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using Microsoft.Build.Execution;
 
namespace CLRViaCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(BuildResultCode.Success);
            Console.WriteLine("CLR via c#");
        }
    }
}

在命令行中编译并运行

D:\>csc /t:exe /out:p.exe  Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

Program.cs(2,17): error CS0234: The type or namespace name 'Build' does not
        exist in the namespace 'Microsoft' (are you missing an assembly
        reference?)

D:\>csc /t:exe /out:p.exe /r:Microsoft.Build.dll  Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\>p.exe
Success
CLR via c#

如果引用的dll过多,也可以指定自己的响应文件,比如myresponse.rep。

里面只有一行内容:/r:Microsoft.Build.dll

响应文件myresponse.rep与Program.cs放在同一文件夹。

D:\>csc /t:exe /out:p.exe @myresponse.rep  Program.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\>p.exe
Success
CLR via c#


本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/archive/2011/04/18/2020296.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章