我有一个C#项目文件的路径。仅使用原始项目文件(并知道我是否需要调试或发布),如何确定生成的DLL或EXE的完整路径?
答案 0 :(得分:2)
请注意,这不是理想的方法,因为输出路径可以轻松覆盖(特别是使用CI工具构建时)。如果这不是问题,那么您可以通过解析以下内容来实现此目的:
有关详细信息,请参阅MSBuild common project properties。
然而,这部分相对容易。更难的部分是根据指定的PropertyGroup
解决Condition
部分适用的问题。默认情况下,Configuration
和Platform
是用于解析适用的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>