标签: msbuild

在MSBuild中的属性组内部是否存在"if"类​​型语句?

我目前必须有两个独立的属性组,它们之间只有两个差异,根据条件设置为具有一个或另一个触发器.这就是我所拥有的:

<!--CAME FROM TEAMBUILD-->
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' != 'Debug|AnyCPU' AND '$(Configuration)|$(Platform)' != 'Release|AnyCPU' AND '$(BuildingInsideVisualStudio)' != 'true' ">
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
      set MAGE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe"
      set APPFILE=$(TargetDir)$(TargetName).application
      set MANIFEST=$(TargetPath).manifest
      set CERT=$(ProjectDir)$(TargetName).pfx
      set PROJECTNAME=$(TargetName)
      set CONFIGURATION=$(ConfigurationName)
      set TARGETDIR=$(TargetDir)
      set TEAMBUILD=$True
      Powershell -File "$(ProjectDir)POSTBUILD.ps1"
    </PostBuildEvent>
  </PropertyGroup>

  <!--CAME FROM PUBLISH COMMAND-->
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' != 'Debug|AnyCPU' AND '$(Configuration)|$(Platform)' != 'Release|AnyCPU' AND '$(BuildingInsideVisualStudio)' == 'true' ">
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
      set MAGE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe"
      set APPFILE=$(TargetDir)$(TargetName).application
      set MANIFEST=$(TargetPath).manifest
      set …
Run Code Online (Sandbox Code Playgroud)

msbuild cmd team-build post-build-event

0
推荐指数
2
解决办法
3766
查看次数

Web部署忽略MSBuild设置的SkipExtraFilesOnServer

我正在使用MSBuild在CruiseControl Server上创建Web部署程序包以部署Web应用程序。部署后,软件包中未包含的所有内容都将在我们的服务器上删除。

我尝试将选项SkipExtraFilesOnServer选项设置为true。但是它被Web Deploy忽略

<Target Name="CreateDeploymentPackage">
    <MSBuild Projects="$(Web)" Targets="Package"
      properties="Platform=$(Platform);
      Configuration=$(Configuration);
      DeployOnBuild=False;
      DeployTarget=Package;
      SkipExtraFilesOnServer=True;
      MSDeployUseChecksum=True;
      PackageLocation=$(DeployDirectory)\_PublishedWebsites\DeployPackage\$(CurrentProject).zip;
      PackageAsSingleFile=True;
      _PackageTempDir=$(PackageOutputDir)\temp;">
    </MSBuild>
</Target>
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?我发现的每个文档都说应该。

asp.net msbuild package msdeploy

0
推荐指数
1
解决办法
2275
查看次数

NuGet缺少.nuget文件夹ic:\ Users \ MyUserName

我终于在VS2015上安装了VS2015,以避免为单独安装必要的组件而烦恼,但是现在在构建时遇到了一个新错误。

在我的解决方案上运行MSBuild会产生以下错误:

 "C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Api.sln" (default target) (1) ->
"C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Api\Imp.Cook.Api.csproj" (default target) (2) ->
"C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Models\Imp.Cook.Models.csproj" (default target) (3) ->
(ResolveNuGetPackageAssets target) ->
C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.targets(89,5):
error : The package Microsoft.CSharp with version 4.0.0 could not be found in 
C:\Users\Bamboo\.nuget\packages. 
Run a NuGet package restore to download the package.
Run Code Online (Sandbox Code Playgroud)

现在,我可以在Bamboo用户目录中手动创建一个.nuget文件夹,这会有所帮助(在下一个包中仍然失败Microsoft.NETCore.Portable.Compatibility)。

但是我在这里错过了什么难题呢?我nuget restore在运行msbuild之前先运行,它获取直接在项目中使用的软件包。

Imp.Cook.Models 是针对Windows 10通用应用程序和.NET 4.6的可移植类库。

生成服务器正在运行Windows Server 2012。

msbuild nuget portable-class-library nuget-package-restore

0
推荐指数
1
解决办法
4850
查看次数

Visual Studio 2015命令窗口

我从未在Visual Studio中使用命令窗口,但现在我正在研究如何使用构建脚本.我正在学习本教程:

https://msdn.microsoft.com/en-us/library/dd393573.aspx

我得到了在命令窗口中输入以下内容的部分:

msbuild buildapp.csproj /t:HelloWorld
Run Code Online (Sandbox Code Playgroud)

这就是我输入的内容,但我得到了

msbuild无效

在进入msbuild之前是否需要输入另一个命令?

我能够使用DOS cmd窗口转到我的C:驱动器上的MSBuild.exe位置.我能够在那里运行它.如果这是答案,那很好.我想我认为它可以从Visual Studio命令窗口运行它.

c# msbuild visual-studio-2015

0
推荐指数
1
解决办法
2182
查看次数

通过Visual Studio 2017中的postbuild活动构建.net核心项目

我有项目A,其对项目的依赖B,但也从没有提及BA.我想建立和复制组件bin folder项目B,以bin folder项目A.我怎么能用post build事件做到这一点dotnet msbuild.

我找到了这个链接,但它适用于VS 2015及以下和MS-Build:

通过prebuild事件构建另一个项目而不添加引用

msbuild post-build-event visual-studio .net-core visual-studio-2017

0
推荐指数
1
解决办法
4384
查看次数

MSBuild.ILMerge.Task不允许重复类型

我通过调用ILMerge收到以下错误.

ILMerge.Merge:ERROR !!:在程序集"System.Net.Http.Formatting"中找到重复类型"System.Net.Http.HttpRequestMessageExtensions".你想使用/ alllowDup选项吗?

你会认为这很容易解决.错误消息说明要做什么.

但是我对ILMerge的调用是由MSBuild.ILMerge.Task完成的

似乎我已经做了我需要做的事情来实现这一目标......

从我的ILMerge.props文件:

<!-- added in Version 1.0.4, default=none -->
<ILMergeAllowDuplicateType>true</ILMergeAllowDuplicateType>
Run Code Online (Sandbox Code Playgroud)

`我收到有关此属性文件验证的警告,但没有任何其他方法可以阻止构建.那么将它传达给ILMerge需要什么?

.net c# msbuild ilmerge static-linking

0
推荐指数
1
解决办法
1512
查看次数

dotnet核心中的重复错误消息

重现步骤

dotnet new console
(introduce a bug in Program.cs)
dotnet restore
dotnet build
Run Code Online (Sandbox Code Playgroud)

典型的输出为:

Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved.

Program.cs(5,5): error CS0116: A namespace cannot directly contain members such as fields or methods [/Users/xxx/Documents/myproj/myproj.csproj]

Build FAILED.

Program.cs(5,5): error CS0116: A namespace cannot directly contain members such as fields or methods [/Users/xxx/Documents/myproj/myproj.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:01.77
Run Code Online (Sandbox Code Playgroud)

您可以看到错误CS0116被报告两次。

我的问题是:有没有办法避免重复报告错误?

msbuild .net-core visual-studio-code dotnet-cli

0
推荐指数
1
解决办法
450
查看次数

NO JSON文件与特定模式匹配:appsettings.json

我在Team Services发布时遇到此错误.我怀疑这个错误发生,因为我生成一个压缩的工件.

MSBuild配置:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"
Run Code Online (Sandbox Code Playgroud)

然后在我的发布中我试图替换appsettings.json变量:

替换文件

所以工件是一个zip文件,可能是因为发布管理没有找到appsettings.json文件.但是处理它的方法是什么?构建一个没有压缩的工件?

msbuild tfs azure-devops

0
推荐指数
1
解决办法
1409
查看次数

MSBuild错误:"无法解析此引用.无法找到程序集......"

据我所知,已经有一个问题在这里问的是完全相同的错误消息,但不幸的是,公认的答案并不为我工作.

我能够在今天早上成功构建我当前的解决方案,但是〜15分钟前构建突然失败,并显示以下错误消息:

C:\ Program Files(x86)\ MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5):警告MSB3245:无法解析此引用.找不到程序集"MyAssembly.dll".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.

不幸的是,我的代码需要这个DLL.因为无法找到它,我的解决方案将无法编译.

我已经尝试过清洁然后再次构建我的解决方案,但这没用.

我注意到此引用旁边有一个黄色图标,所以我删除了引用,然后从<HintPath>.csproj文件中标记内指定的完全相同位置再次添加它.(位置是\bin\Debug文件夹.)然后黄色图标消失.

但是,在我单击"构建解决方案"(在模式下)后,立即Debug再次出现黄色图标,我再次看到相同的MSBuild错误消息,通知我无法找到DLL.

我该如何解决这个问题?

.net msbuild visual-studio-2015

0
推荐指数
1
解决办法
6053
查看次数

MsBuild PostBuild目标

我已将AfterBuild目标添加到Visual Studio项目,这是包含多个Visual Studio项目的解决方案的一部分。

解决方案设置示例

例子.sln

  • ExampleProj.csproj

  • ExampleProj.Test.csproj

目标示例:

  <Target Name="PostBuildScript" AfterTargets="AfterBuild" Condition="'$(Configuration)' == 'Release'">
    <PropertyGroup>
      <BuildCommand>"SomeApplication.exe")</BuildCommand>
    </PropertyGroup>
    <Exec Command="$(BuildCommand)" ConsoleToMSBuild="true" LogStandardErrorAsError="true" WorkingDirectory="$(ProjectDir)" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我希望此目标在解决方案中的所有Visual Studio项目都已建立之后才能执行。

有没有办法实现这一目标。

注意:dotnet build在Visual Studio中使用和生成命令时,我的行为必须相同。

c# msbuild csproj msbuild-target visual-studio-2017

0
推荐指数
1
解决办法
1392
查看次数