https://blog.csdn.net/austin_link/article/details/40596185

C#项目中都会有一个不起眼的文件,后缀名csproj,很多人都会忽视它。其实,这个文件在项目中起到举足轻重的地位。这个文件其实是一个项目的工程文件,不过,正常开发中,这个文件基本上不会需要考虑到。这时候,你应该会问这个文件作用,其实,这个文件记录了与工程有关的相关信息,例如包含的文件,程序的版本,所生成的文件的类型和位置的信息等。

这个文件其实是给编译工具看的,这个文件记录了这个项目的项目名,项目引用,项目中文件,项目用到的.net版本等等一系列信息,因为之前在做持续集成遇到编译问题,所以花了点时间学习这个文件。

其中常见节点元素如下:

1)Project 节点

<Project ></Project >这个元素是工程文件的根节点,所有其他节点都是在这个节点之下,用于表示项目的范围

2)Property元素

在项目中你肯定需要经常访问一些信息,这个节点用于记录项目信息的,例如需要创建的路径名、最终生成的程序集名称等。以name/value的形式添加进Property,随后就可以以$(PropertyName)的形式访问。

  1.  
    <PropertyGroup>
  2.  
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  3.  
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  4.  
    <ProductVersion>8.0.30703</ProductVersion>
  5.  
    <SchemaVersion>2.0</SchemaVersion>
  6.  
    <ProjectGuid>{F630BB4D-A352-40C1-9C6B-CD9C5F77EAF1}</ProjectGuid>
  7.  
    <OutputType>Library</OutputType>
  8.  
    ...
  9.  
    <RootNamespace>TCBase.Model</RootNamespace>
  10.  
    <AssemblyName>TCBase.Model</AssemblyName>
  11.  
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  12.  
    ...
  13.  
    </PropertyGroup>

这里就需要解释下节点的意思了:

Configuration节点,可以用于MSBuild传参,后续写关于MSBuild会详细列出,这里参数用于MSBuild编译方式,一种是Dabug,还有一种是Release,直观就是文件生成bin目录中生成是Debug还是Release

Platform节点,这个是表示运行解决方案平台,在VS项目属性中修改,VS中“配置管理器”-->“活动解决方案平台”修改

ProkectGuid节点,这个我理解为这个项目在这个解决方案中的唯一标示,可以说是名字,了解的可以补充。

RootNamespace节点,这个表示这个项目的默认根命名空间名字。

AssemblyName节点,这个表示项目生成dll后的名字。

注意,一般一个工程文件会有多个PropertyGroup节点,其中的Platform,AssemblyName等都可以不相同,编译的时候会由传入的参数决定的,如Debug会选择Debug的节点,Release会选择Release节点,默认会使用第一个,不过不建议修改,vs会生成的,除非你对这个非常熟,否则容易改错。

3)Item元素

在整个项目文件中提供源代码文件、引用的程序集名称、需要嵌入的图标资源等,最为常用的部分。

语法:<Item Type=”TheType”Include=”NameOrPath” />

Type表示资源的类别

.cs文件设为Source

程序集为Reference

Include是具体的资源,可以使路径或者C#源代码文件的名称。如要表示当前项目所有cs文件,可以使用通配符*:

<Item Type="SourceInclude="*.cs" />

后面使用的时候就通过@(Source)来调用

基本Item节点有三种,一是引用dll文件,一是源代码文件,还有一个是当前解决方案中的项目。

4)ItemGroup元素

第一种

  1.  
    <ItemGroup>
  2.  
    <ReferenceInclude="CnCookieInterface">
  3.  
    <HintPath>..\TCWeb.SolutionItems\CnCookieInterface.dll</HintPath>
  4.  
    </Reference>
  5.  
    <ReferenceInclude="System" />
  6.  
    </ItemGroup>

其中Include后面表示引用在VS中显示引用的名字,这里可以修改,VS默认和文件名相同,如果是系统的就不需要HintPath节点,这个节点表示引用的dll路径,这里一般是相对路径,注意,这里路径错了,引用就找不到了,vs中有问题可以直接到这里修改。

第二种

  1.  
    <ItemGroup>
  2.  
    <CompileInclude="Car\CarOrderService.cs" />
  3.  
    <CompileInclude="Common\CashCouponService.cs" />
  4.  
    </ItemGroup>

这个是当前项目的源代码文件即.cs文件。

第三种

  1.  
    <ItemGroup>
  2.  
    <ProjectReferenceInclude="..\TCWeb.Core\TCWeb.Core.csproj">
  3.  
    <Project>{AC131436-6FB7-4332-BC6C-7950ECCE55BD}</Project>
  4.  
    <Name>TCWeb.Core</Name>
  5.  
    </ProjectReference>
  6.  
    </ItemGroup>

这个是引用当前解决方案中的项目,Include中表示引用项目的工程文件,Name表示当前项目名,Project系统生成的,就是上面说的<ProjectGuid>几点

总体上主要就这三种引用的方式

PS:

  1.  
    <Reference Include="FlightInter.MerchantService.Business ">
  2.  
    <SpecificVersion>False</SpecificVersion>
  3.  
    <HintPath>..\..\ExtDll\FlightInter.MerchantService.Business.dll</HintPath>
  4.  
    <Private>False</Private>
  5.  
    </Reference>

注意其中的<Private>属性,被这个坑了一次,这个表示是否复制到本地,不小心改到这个你会发现项目中会无缘无故复制很多文件

ASP工程文件(csproj)解读的更多相关文章

  1. 工程文件csproj使用编译条件指定属性

    csproj工程文件中有很多xml格式的属性,比如PropertyGroup.ItemGroup,某些属性操作默认是全部的或者是当前编译条件的而已,当我们想指定某些属性只在某个编译条件下发生时就可以通 ...

  2. .NET项目中实现多工程文件共用的方法

    一处开发,多处同步编辑使用,并且发布时各个项目均可独立 一.直接编辑项目工程文件 .csproj 具体实现为:编辑 .csproj 文件,在<ItemGroup>中添加新的 <Con ...

  3. Visual Studio 2010 C++ 工程文件解读

    在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...

  4. 【转】全面解析Unity3D自动生成的脚本工程文件

    http://blog.csdn.net/jjiss318/article/details/7632041 我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如: Assemb ...

  5. 【转载】全面解析Unity3D自动生成的脚本工程文件

    我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如:  Assembly-CSharp-vs.csproj  Assembly-CSharp-firstpass-vs.csp ...

  6. 配置工程文件dll编译后copy路径

    放到工程文件的最后面的配置节点: 下面的配置节点中生成路径换成实际的相对路径就可以了 修改:Prject.csproj 文件里面的配置节点  project配置节点里面的最后面 <Target ...

  7. Xcode工程文件pbxproj

    Xcode工程文件pbxproj Xcode会去读Project.pbxproj文件,把pbxproj转成plist文件,看起根目录结构 rootObject:指向的是我们的工程对象.(对应一个24个 ...

  8. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥

    偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...

  9. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】

    试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...

随机推荐

  1. vue的数组如何存储数据

    vue 和 angular 还有有些区别的, 比如,vue中的数组数据改变后,view并没有发生改变,angular就不会这样. 所以VUE 在数组扩展方法中提供以了一个新的API arr.$set( ...

  2. Spring Boot干货系列:(二)配置文件解析

    Spring Boot干货系列:(二)配置文件解析 2017-02-28 嘟嘟MD 嘟爷java超神学堂   前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于 ...

  3. Jar/War/Ear等包的作用与区别详解

    以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.java中除了jar格式还有war和ear等包文 ...

  4. SpringMVC 多个数据源 配置多个事物管理器 Multiple Transaction Managers

    http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction ...

  5. HTML——表单与锚点

    练习做一个邮箱的注册页面 1.12行2列的表格 2.表格里面嵌入表单 3.最后建一个锚点 4.写具体内容 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  6. NFS根文件系统

    按照以前文档可以正确制作根文件系统,并且开发板可正确nfs挂测主机目录. 现只需修改bootargs,使内核启动时挂测文件系统即可.setenv bootargs mem=64M console=tt ...

  7. [转]Python Web部署方式总结

    学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服务器支持不足,在了 ...

  8. 二、Linux 静态IP,动态IP配置

    Linux 静态IP,动态IP配置 第一步:激活网卡 系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活. # ifconfig eth0 up 第二步:设置网卡进入系统时启动 想要每次开机就 ...

  9. js学习笔记18----元素创建操作

    1.父级.appendChild(新的元素) 从后面开始追加子元素. 2.父级.insertBefore(新的元素,被插入的元素) 在指定元素前面开始插入一个新元素. 兼容性:在ie下,如果第二个参数 ...

  10. 封装自己的yQuery

    function myAddEvent(obj, sEv, fn) { if (obj.attachEvent) { obj.attachEvent('on' + sEv, fn) } else { ...