如何从c#项目文件中获得DLL或EXE名称?

本文关键字:DLL EXE 名称 项目文件 | 更新日期: 2023-09-27 18:19:19

我有一个c#项目文件的路径。仅使用原始项目文件(并知道我是否想要调试或发布),我如何确定生成的DLL或EXE的完整路径?

如何从c#项目文件中获得DLL或EXE名称?

请注意,这不是理想的方法,因为输出路径很容易被覆盖(特别是在使用CI工具构建时)。如果这不是一个问题,那么您可以通过解析以下内容来实现:

  1. OutputPath——这是相对于。csproj文件
  2. 的位置。
  3. OutputType——这将为您提供项目类型,您可以派生文件扩展名
  4. AssemblyName——这是二进制文件
  5. 的文件名

详细信息请参见MSBuild公共项目属性。

然而,这部分相对容易。更困难的部分是根据指定的Condition来确定哪个PropertyGroup区段适用。默认情况下,ConfigurationPlatform是用于解析适用PropertyGroup的两个输入属性。然而,如果项目文件以任何方式定制(不推荐),那么您的任务将变得非常非常复杂,因为您现在必须解析并计算 PropertyGroup条件。

Update:一个更健壮的解决方案是直接使用MSBuild库来解释项目文件。我敢肯定这并不难——如果我能想出一个可行的解决方案,我会在稍后发布。

项目文件本质上只是一个XML文件,其中存储了一堆选项和设置。下面是一个项目文件的小快照,您可以看到一些元素的层次结构:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{28819998-A463-46E9-8ADC-855B0DF9AE9C}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Final_Lab</RootNamespace>
    <AssemblyName>Final Lab</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <FileUpgradeFlags>
    </FileUpgradeFlags>
    <UpgradeBackupLocation>
    </UpgradeBackupLocation>
    <OldToolsVersion>3.5</OldToolsVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin'Debug'</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin'Release'</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
</Project>