首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >csproj项目文件中的已知属性

csproj项目文件中的已知属性

原创
作者头像
秦建辉
修改2025-07-10 09:26:09
修改2025-07-10 09:26:09
1820
举报
文章被收录于专栏:WPF编程WPF编程

编译上下文

以下属性是基本的输出路径属性,可以在 Microsoft.NET.DefaultOutputPaths.targets 找到。

  • $(Configuration)
    • 这就是我们传说中决定 Debug 还是 Release 的属性。如果没有指定,默认是 Debug。
  • $(Platform)
    • 默认是 AnyCPU,还可以是 x86x64 或者 ARM
  • $(BaseOutputPath)
    • 输出路径的起始位置。如果没有指定,就是 bin\。修改这个属性可以间接修改 OutputPath
  • $(OutputPath)
    • 输出路径,默认有两种可能的值。如果 AnyCPU 编译,就是 $(BaseOutputPath)$(Configuration)\;否则就是 $(BaseOutputPath)$(PlatformName)\$(Configuration)\
  • $(BaseIntermediateOutputPath)
    • 临时生成路径的起始位置。如果没有指定,就是 obj\。修改这个属性可以间接修改 IntermediateOutputPath
  • $(IntermediateOutputPath)
    • 临时生成路径,默认有两种可能的值。如果 AnyCPU 编译,就是 $(BaseIntermediateOutputPath)$(Configuration)\;否则就是 $(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\

文件路径

项路径

写在 csproj 文件中 ItemGroup 组中的每一个元素即“项”。

代码语言:xml
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <NeutralLanguage>zh-Hans</NeutralLanguage>
    <RootNamespace>FirstSolver</RootNamespace>
    <Authors>秦建辉</Authors>
    <ProduceReferenceAssembly>False</ProduceReferenceAssembly>
    <GenerateDocumentationFile>True</GenerateDocumentationFile>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <AssemblyVersion>1.0.0</AssemblyVersion>
    <FileVersion>$(AssemblyVersion)</FileVersion>
    <Version>$(AssemblyVersion)</Version>
    <Title>$(AssemblyName)</Title>
    <Description>$(Title)</Description>
    <PackageId>$(AssemblyName)</PackageId>
    <PackageIcon>FirstSolver.png</PackageIcon>
    <PackageTags>$(AssemblyName)</PackageTags>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)'== 'Debug'">
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\$(PackageIcon)" Link="$(PackageIcon)">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      <Pack>True</Pack>
      <PackagePath>\</PackagePath>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="C2VCommon" Version="1.8.4" />
  </ItemGroup>

  <ItemGroup>
    <None Include="..\GoogolSdk\*.dll" Link="%(Filename)%(Extension)">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>True</Pack>
      <PackagePath>runtimes\win-x64\native</PackagePath>
    </None>

    <None Include="..\GoogolSdk\GlinkCfg.txt" Link="GlinkCfg.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Pack>True</Pack>
      <PackagePath>contentFiles\any\any</PackagePath>
    </None>

    <None Include="build\*.props">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      <Pack>True</Pack>
      <PackagePath>build</PackagePath>
    </None>
  </ItemGroup>

  <ItemGroup>
    <Compile Include="..\GoogolSdk\*.cs" Link="%(Filename)%(Extension)" />
  </ItemGroup>

</Project>

那么,可用的属性有:

  • %(FullPath)
    • 文件的完全路径,例如: E:\MachiningService\GoogolSdk\gts.cs
  • %(RootDir)
    • 文件所在的根目录,例如: E:\
  • %(Filename)
    • 文件名(不含扩展名),例如: gts
  • %(Extension)
    • 文件扩展名,例如: .cs
  • %(RelativeDir)
    • 文件所在的文件夹,例如: GoogolSdk\
  • %(Directory)
    • 除了根目录之外的目录,例如: MachiningService\GoogolSdk
  • %(RecursiveDir)
    • 如果项是用通配符写的,那么此值表示匹配到某一项时的目录,例如: MachiningService\GoogolSdk\
  • %(Identity)
    • 项的标识符,也就是 Include 里写的东西,例如: ..\GoogolSdk\*.cs
  • %(ModifiedTime)
    • 文件的修改时间,例如: 2025-04-12 21:00:43.7851385
  • %(CreatedTime)
    • 文件的创建时间,例如: 2025-04-12 21:01:50.1417635
  • %(AccessedTime)
    • 文件最近被访问的时间,例如: 2025-04-12 21:02:15.4132476

全局路径

  • 项目文件
    • $(MSBuildProjectFullPath)
      • 项目文件的绝对路径,例如: E:\MachiningService\MachiningService\MachiningService.csproj
    • $(MSBuildProjectDirectory)
      • 项目所在的文件夹,例如: E:\MachiningService\MachiningService
    • $(MSBuildProjectFile)
      • 项目文件的完整名称,例如: MachiningService.csproj
    • $(MSBuildProjectName)
      • 项目文件的名称,不含扩展名,例如 MachiningService
    • $(MSBuildProjectExtension)
      • 项目文件的扩展名,例如: .csproj
    • $(MSBuildProjectDirectoryNoRoot)
      • 项目文件去除驱动器的路径,包含反斜杠
  • 部件(例如 .props 文件或 .targets 文件,当然也包含 .csproj 文件)
    • $(MSBuildThisFileFullPath)
      • 用这个属性的文件所在的绝对路径,例如 E:\MachiningService\MachiningService\build\MachiningService.props
    • $(MSBuildThisFileDirectory)
      • 此文件所在的文件夹,例如: E:\MachiningService\MachiningService\build\
    • $(MSBuildThisFile)
      • 此文件的完整名称,例如 MachiningService.props
    • $(MSBuildThisFileName)
      • 此文件的名称,不含扩展名,例如 MachiningService
    • $(MSBuildThisFileExtension)
      • 此文件的扩展名,例如 .props
    • $(MSBuildThisFileDirectoryNoRoot)
      • 此文件去除驱动器的路径,包含反斜杠
  • 环境
    • $(MSBuildStartupDirectory)
      • 启动 MSBuild 时的路径,类似于工作目录(输入 msbuild 命令时所在的那个文件夹)
  • 工具
    • $(MSBuildToolsPath)
      • MSBuild 工具所在的路径
    • $(MSBuildToolsVersion)
      • 此次编译锁使用的工具的版本

另外还有一些在新的 SDK 中几乎不会在日常开发中用到的全局属性:

  • $(MSBuildBinPath): MSBuild 程序所在的路径
  • $(MSBuildExtensionsPath): 自定义 targets 所在的路径
  • $(MSBuildExtensionsPath32): 自定义 targets 所在的路径
  • $(MSBuildExtensionsPath64): 自定义 targets 所在的路径

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译上下文
  • 文件路径
    • 项路径
    • 全局路径
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档