如何从c#项目文件中获得DLL或EXE名称?
本文关键字:DLL EXE 名称 项目文件 | 更新日期: 2023-09-27 18:19:19
我有一个c#项目文件的路径。仅使用原始项目文件(并知道我是否想要调试或发布),我如何确定生成的DLL或EXE的完整路径?
请注意,这不是理想的方法,因为输出路径很容易被覆盖(特别是在使用CI工具构建时)。如果这不是一个问题,那么您可以通过解析以下内容来实现:
- OutputPath——这是相对于。csproj文件 的位置。
- OutputType——这将为您提供项目类型,您可以派生文件扩展名
- AssemblyName——这是二进制文件 的文件名
详细信息请参见MSBuild公共项目属性。
然而,这部分相对容易。更困难的部分是根据指定的Condition
来确定哪个PropertyGroup
区段适用。默认情况下,Configuration
和Platform
是用于解析适用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>