【问题标题】:$(ProjectDir) prebuild event macro incorrect$(ProjectDir) 预构建事件宏不正确
【发布时间】:2017-04-27 11:17:08
【问题描述】:

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

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

在我的预构建活动中,我想运行doSomething.bat,所以我有这个脚本:

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

但是,$(ProjectDir) 实际上将我置于C:\Project\src\Project\bin\Debug\netcoreapp1.1\

这不是文档所述。我该如何解决这个问题?

【问题讨论】:

  • 我也发现.net core项目中的宏“$(OutDir)”不正确,我猜这个问题的原因与MSBuild对.NET Core项目支持的新变化有关,具有简化的 csproj 项目格式,可以更轻松地手动编辑,无需卸载项目。现在,Martin Ullrich 的回答中的 issue 1569 已经解释了这个问题的原因。他回答是为了解决你的问题吗?如果没有,请让我们知道有关此问题的最新状态。
  • MS 令人难以置信的疏忽。只是一个彻头彻尾的错误,无论出于何种原因都没有得到修复。

标签: visual-studio msbuild visual-studio-2017


【解决方案1】:

对于基于 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>

【讨论】:

    【解决方案2】:

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

    查看链接上的示例。解决方案的重点是修改.csproj文件为:

    • 根标签没有属性:只是&lt;Project&gt;而不是&lt;Project Sdk="Microsoft.NET.Sdk"&gt;
    • 开头导入Sdk.props&lt;Import Sdk="Microsoft.NET.Sdk.Web" Project="Sdk.props" /&gt;
    • 在构建前、构建后事件之前导入Sdk.targets&lt;Import Sdk="Microsoft.NET.Sdk.Web" Project="Sdk.targets" /&gt;

    【讨论】:

      【解决方案3】:

      我在手动编辑项目文件后发生了这种情况。

      我无意中移动了这一行:

      &lt;Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /&gt;

      below &lt;PropertyGroup&gt;&lt;PreBuildEvent&gt; ... 元素从其原始位置 above 它们。

      试试这个:

      1. 打开您的项目文件,例如MyProject.csproj(或MyProject.vbproj)。
      2. 找到&lt;Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /&gt;(或&lt;Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /&gt;)。
      3. 将其移至构建事件元素的正上方 (&lt;PropertyGroup&gt;&lt;PreBuildEvent&gt; ...)
      4. 清理项目/解决方案,重新编译,你应该就好了。

      注意:我还有另一个项目有这个错误,所以我认为它也可能“发生”。

      【讨论】:

        猜你喜欢
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多