相关疑难解决方法(0)

Visual Studio中的Before和AfterBuild目标未触发

我正在做以下事情:

  • 我创建了一个默认的类文件项目
  • 编辑csproj文件以包含Pre和Post BuildEvents
  • 取消注释默认注释掉的BeforeBuild和AfterBuild目标

BeforeBuild和AfterBuild目标在Visual Studio中不是调用窗体,而是来自msbuild命令行,为什么会这样?

假设它有效,我宁愿使用msbuild目标而不是PostBuildEvent,就好像给了我更多的力量和灵活性.

干杯,

亚当

我缩短了输出中的一些路径,所以如果它们不一致就是为什么


ClassLibrary1.csproj发生了变化

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
  <Message Text="### BeforeBuild ###" />
</Target>
<Target Name="AfterBuild">
  <Message Text="### AfterBuild ###" />
</Target>
<PropertyGroup>
  <PreBuildEvent>echo PRE_BUILD</PreBuildEvent>
</PropertyGroup>
<PropertyGroup>
 <PostBuildEvent>echo POST_BUILD</PostBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我对VS 2010的构建输出是

------ Rebuild All started: Project: ClassLibrary1, Configuration: Debug Any CPU ------
PRE_BUILD
ClassLibrary1 -> c:\ClassLibrary1\bin\Debug\ClassLibrary1.dll
POST_BUILD
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

并从命令行

#>msbuild ClassLibrary1.sln
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version …
Run Code Online (Sandbox Code Playgroud)

msbuild visual-studio-2010

17
推荐指数
2
解决办法
2万
查看次数

MS-Build BeforeBuild未触发

我正在定制一个.csproj项目,在主构建之前运行一些自定义任务.但是,我根本无法执行任务.

我取消注释文件中的<Target Name="BeforeBuild" />元素.csproj并添加了一个简单的Message任务,但是当我构建时,消息没有出现在我的输出中,所以看起来任务没有运行.所以这个片段不输出消息;

清单1:没有消息出现

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" Importance="normal" />
</Target>
Run Code Online (Sandbox Code Playgroud)

但是,如果我搞砸了一些属性,我可能会.csproj完全无法执行;

清单2:MSBuild配置错误

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" XXImportance="normal" />
</Target>
Run Code Online (Sandbox Code Playgroud)

注意XXImportance属性.我得到的构建错误是

My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property.
Run Code Online (Sandbox Code Playgroud)

这表明正在解析XML,Message已找到该类,并且该类正在反映可用属性.

为什么这个任务不会执行?

我正在使用3.5框架.

更新1:在@Martin的建议下,我试图在控制台上运行MSBuild,并得到了这个错误;

c:\path\to\my.csproj(74,11): error MSB4019: The imported …
Run Code Online (Sandbox Code Playgroud)

c# msbuild csproj prebuild

13
推荐指数
2
解决办法
9854
查看次数

在调用之前如何检查目标是否存在?

有没有办法检查目标的存在,以便我们只有在它存在时才能调用它?

msbuild

7
推荐指数
1
解决办法
1694
查看次数

当目标在VS解决方案中失败时,如何使msbuild失败?

我在命令行上使用msbuild来构建包含C++项目的VS2012解决方案.该项目有一个在构建之后运行的目标:

<Target Name="RunTargetAfterBuild" AfterTargets="Build">
  <Error Text="I am a failing target" />
</Target>
Run Code Online (Sandbox Code Playgroud)

我希望msbuild在构建时返回错误,但是在构建过程中的某个地方,错误会丢失并且msbuild报告"构建成功".因此,ERRORLEVEL仍然设置为0,因此在自动构建期间检测是否出现问题非常困难.如何让msbuild将此错误一直传播到顶级项目/解决方案?我知道这是可能的,因为编译器错误等会发生这种情况.

以下是输出的相关部分:

> msbuild test.sln

...

...: error : I am a failing target  [...test.vcxproj]
Done Building Project "...test.vcxproj" (default targets) -- FAILED.

Done Building Project "...test.vcxproj.metaproj" (default targets).

Done Building Project "...test.sln" (Build target(s)).

Build succeeded.    --> this is NOT what I want

....

0 Warning(s)
1 Error(s)
Run Code Online (Sandbox Code Playgroud)

对于编译器错误,输出是这样的:

> msbuild test.sln

....

...: error C3861: 'HECK': identifier not found [...test.vcxproj]
Done Building Project "...test.vcxproj" (default targets) …
Run Code Online (Sandbox Code Playgroud)

msbuild projects-and-solutions visual-studio

6
推荐指数
1
解决办法
4503
查看次数