2017-04-27 37 views
0

我正在使用Visual Studio 2017,并且我有一个预生成事件。

我有一个项目位于C:\Project\src\Project\,批文件doSomething.batC:\Project\src\Project\doSomething.bat

在我的预生成事件,我想运行doSomething.bat,所以我有这样的脚本:

cd $(ProjectDir) && call ./doSomething.bat 

然而,$(ProjectDir)居然把我本人在C:\Project\src\Project\bin\Debug\netcoreapp1.1\

这不是什么文档状态。我怎样才能解决这个问题?

+0

我也发现这对于.net核心项目中的宏“$(OutDir)”不正确,我猜这个问题的原因是相关的MSBuild支持.NET Core项目的新变更,以及简化的csproj项目格式,使得手动编辑更加容易,无需卸载项目。现在,马丁乌尔里奇的回答中的问题1569解释了这个问题的原因。他是否回答解决你的问题?如果没有,请让我们了解这个问题的最新状态。 –

回答

2

对于基于SDK-项目PreBuildEventPostBuildEvent进行评估还为时过早接受“最终”值很多的属性,他们甚至将被取消(见https://github.com/dotnet/project-system/issues/1569

作为一个快速的解决方法,你可以。使用$(MSBuildProjectDirectory)$(MSBuildThisFileDirectory),这将给你的.csproj文件所在的目录

对于一个更加综合的解决方案,您可以添加自定义目标像这样的csproj文件(没有cd步需要):

<Target Name="MyAfterBuild" AfterTargets="Build"> 
    <Exec Command="test.bat" /> 
</Target> 
0

有一个workaround关于如何使其正确解析常见的宏和属性(在线程上讨论,由@MartinUllrich提到)。

查看链接示例。该解决方案的关键点是修改.csproj文件,以便:

  • 根标签保持不带属性:刚刚<Project>而不是<Project Sdk="Microsoft.NET.Sdk">
  • 导入Sdk.props开头:<Import Sdk="Microsoft.NET.Sdk.Web" Project="Sdk.props" />
  • 进口Sdk.targets之前预,生成后事件:<Import Sdk="Microsoft.NET.Sdk.Web" Project="Sdk.targets" />