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

时间:2014-08-23 02:47:03

标签: c#

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

2 个答案:

答案 0 :(得分:2)

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

  1. OutputPath - 这是相对于.csproj文件的位置
  2. OutputType - 这将为您提供项目类型,您可以派生文件扩展名
  3. AssemblyName - 这是二进制文件的文件名
  4. 有关详细信息,请参阅MSBuild common project properties

    然而,这部分相对容易。更难的部分是根据指定的PropertyGroup解决Condition部分适用的问题。默认情况下,ConfigurationPlatform是用于解析适用的PropertyGroup的两个输入属性。但是,如果以任何方式(不推荐)自定义项目文件,那么您的任务变得非常非常复杂,因为您现在必须解析 并评估 {{1}条件。

    更新:更强大的解决方案是直接使用MSBuild库来解释项目文件。我相当肯定这并不困难 - 如果我能提出一个有效的解决方案,我会稍后发布。

答案 1 :(得分:1)

项目文件本质上只是一个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>