Msbuild 指定生成目录名

Msbuild 指定生成目录名,msbuild,Msbuild,我需要将项目内置到文件夹中: \bin\Debug 1.0.3.4 其中1.0.3.4是在assembly:AssemblyVersion属性中指定的当前建筑部件版本。 我尝试使用不同的变量,如$(AssemblyVersion),GetAssemblyIdentity任务,但没有成功。。我不太擅长使用MSBuild。解决这个问题的一个快速而肮脏的方法是,在生成之后,使用GetAssemblyIdentity提取版本信息,然后将$(TargetFile)移动到适当的目录 这假设您没有任何依赖关

我需要将项目内置到文件夹中:

\bin\Debug 1.0.3.4
其中
1.0.3.4
是在
assembly:AssemblyVersion
属性中指定的当前建筑部件版本。

我尝试使用不同的变量,如
$(AssemblyVersion)
GetAssemblyIdentity
任务,但没有成功。。我不太擅长使用MSBuild。

解决这个问题的一个快速而肮脏的方法是,在生成之后,使用
GetAssemblyIdentity
提取版本信息,然后将
$(TargetFile)
移动到适当的目录

这假设您没有任何依赖关系。否则,您将需要修改
$(TargetPath)
$(TargetName)
$(targetText)
,或者使用“正确”的方法—动态修改
$(OutputPath)

  <Target Name="AfterBuild" AfterTargets="Build">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
      <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity"/>
    </GetAssemblyIdentity>
    <PropertyGroup>
      <Version>@(AssemblyIdentity->'%(Version)')</Version>
    </PropertyGroup>
    <Copy SourceFiles="$(TargetPath)" DestinationFolder="$(OutDir)$(Version)" />
  </Target>

@(AssemblyIdentity->'%(版本)')
正确的方法是修改
$(OutDir)
aka
$(OutputPath)
,但这将涉及修改AssemblyVersion.cs文件(或者更复杂的是,它的副本会自动注入构建链)


您也可以从AssemblyVersion.cs文件中解析版本。

在csproj文件的调试配置中指定的输出路径属性是什么?您的意思是
1.0.3.4
编号只能作为.cs文件中的字符串使用吗,您应该能够在调试配置中找到输出路径属性。它的价值是什么?卸载您的项目,编辑csproj,然后Ctrl+F”“@stijn,1.0.3.4在他的AssemblyInfo.cs文件中的AssemblyVersion属性下指定,我知道-抱歉,我不够清楚:是否应该根据cs文件中AssemblyVersion属性中找到的版本字符串确定输出文件夹,或者您是否已经有一个实际构建的具有该版本号的dll,并且应该从该dll中提取该版本?