簡體   English   中英

在構建服務器上未找到 Microsoft.WebApplication.targets。 你的解決方案是什么?

[英]Microsoft.WebApplication.targets was not found, on the build server. What's your solution?

嘗試在構建服務器上構建我的項目給了我以下錯誤:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

幾個月前,我通過在 Build Server 上安裝 Visual Studio 2010 解決了這個問題。 但是現在我從頭開始設置一個新服務器,我想知道是否有更好的解決方案來解決這個問題。

要回答問題的標題(但不是有關您獲得的輸出的問題):

如果只是 Web 應用程序,則將以下文件夾從開發機器復制到構建服務器可以解決此問題

C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v10.0\\WebApplications

根據您的構建中斷方式刪除 x86。 如果您有其他項目類型,您可能需要復制整個 msbuild 文件夾。

如果未安裝 VS,則不支持構建和發布 WAP。 話雖如此,如果您真的不想安裝 VS,那么您將需要復制%ProgramFiles32%\\MSBuild\\Microsoft\\下的所有文件。

您還需要安裝Web 部署工具 我想就是這樣。

解決方案是在構建服務器代理上安裝可再發行包。 它可以通過多種方式完成,下面介紹了其中的 3 種。 選擇一個最適合您的。

使用帶有 UI 的安裝程序

這是原始答案

現在,在 2017 年,您可以使用 MSBuildTools 安裝 WebApplication redists。 只需轉到此頁面該頁面將下載 MSBuild 2017 工具,並在安裝時單擊Web development build tools以安裝這些目標: 在此處輸入圖片說明

默認情況下,這將導致在C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\MSBuild\\Microsoft\\VisualStudio\\v15.0\\WebApplications安裝缺少的庫

使用命令行

免責聲明我沒有測試以下任何建議

正如@PaulHicks 和@WaiHaLee 在評論中所建議的那樣,它也可以從 CLI 以無頭模式(無 ui)安裝,這實際上可能是解決刪除服務器上問題的更好方法。

  • 解決方案 A - 使用包管理器 (choco)
choco install visualstudio2017-workload-webbuildtools
  • 解決方案 B - 在無頭模式下運行安裝程序

    請注意,這與建議在原始答案中使用的安裝程序相同

vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools --passive

UPD:從 VS2017 開始,Build Tools 中有工作負載完全消除了這個問題。 請參閱@SOReader 答案

如果您不想修改構建服務器上的任何內容,並且您仍然希望在源代碼管理之外構建項目,那么將所需的二進制文件置於源代碼管理之下可能是個好主意。 您需要將項目文件中的導入部分修改為如下所示:

<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

第一行是從相對於解決方案目錄的新位置的實際導入。 第二個是原始行的關閉版本( Condition="false" ),它允許 Visual Studio 仍將您的項目視為有效的 Web 應用程序項目(這是 VS 2010 SP1 自己做的技巧)。

不要忘記將C:\\Program Files (x86)\\Microsoft\\VisualStudio\\v10.0\\WebApplications復制到源代碼管理下的BuildTargets文件夾。

您還可以使用 NuGet 包MSBuild.Microsoft.VisualStudio.Web.targets ,在您的 Visual Studio 項目中引用它們,然后按照 Andriy K 的建議更改您的引用。

根據此處的這篇文章,您可以簡單地下載Microsoft Visual Studio 2010 Shell(集成)可再發行組件包並安裝目標。

這避免了在生成服務器上安裝 Visual Studio 的需要。

我現在剛剛嘗試過,可以驗證它是否有效:

前:

錯誤 MSB4019:未找到導入的項目“C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets”。 確認聲明中的路徑正確,並且該文件存在於磁盤上。

安裝后:

[正確構建]

顯然,這是比在構建服務器上安裝 Visual Studio 更好的解決方案。

最新的 Windows SDK,如上所述,除了Microsoft.WebApplication.targets“Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package”和 Microsoft.Data.Schema 的“Microsoft Visual Studio Team System 2008 Database Edition GDR R2” .SqlTask​​s.targets 應該可以減輕安裝 Visual Studio 2010 的需要。但是,安裝 VS 2010 實際上可能會減少整體下載量和最終的工作量。

通過 NuGet 添加依賴項並設置構建參數

目標:構建代理無需更改/安裝

在此處采用了 LloydNuGet 方法的混合方法,該方法基於Andrik提交二進制依賴項解決方案。

原因是我希望能夠添加新的構建代理,而無需使用諸如此類的項目預先配置它們。

  1. 在裝有 Visual Studio 的機器上,打開解決方案; 忽略 web 項目失敗。
  2. 在 NuGet 包管理器中,添加MSBuild.Microsoft.VisualStudio.Web.targets ,如 Lloyd 所述。
  3. 這會將二進制文件解析為[solution]\\packages\\MSBuild.Microsoft.VisualStudio.Web.targets.nn.nnn\\tools\\VSToolsPath\\
    1. 您可以將這些復制到引用文件夾並提交,
    2. 或者只是在它們所在的地方使用它們。 我選擇了這個,但是我以后還要處理路徑中的版本號。

在第 7 版中,我執行了以下操作。 這可能沒有必要,根據評論,現在絕對不需要。 請參閱下面的評論。

  1. 接下來,在您的 TeamCity 構建配置中,為env.VSToolsPath添加一個構建參數並將其設置為 VSToolsPath 文件夾; 我用過..\\packages\\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\\tools\\VSToolsPath

在構建/CI 服務器上構建時,通過指定/p:VSToolsPath=''完全關閉Microsoft.WebApplication.targets的導入。 從本質上講,這將使以下行的條件為假:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />


這是在 TeamCity 中完成的方式:

在此處輸入圖片說明

如果您將 Visual Studio 2012 遷移到 2013,則使用 edior 打開 *.csproj 項目文件。
並檢查“項目”標簽的 ToolsVersion 元素。

將其值從 4.0 更改為 12.0

  • <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" ...
  • <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" ...

或者,如果您使用 msbuild 構建,則只需指定 VisualStudioVersion 屬性

msbuild /p:VisualStudioVersion=12.0

解決方案來源

似乎新版本的 msbuild 沒有附帶 Microsoft.WebApplication.targets。 要修復您需要更新您的 csproj 文件,如下所示:

1) 編輯 Web 應用程序 csproj(右鍵單擊)。 在 csproj 底部找到有關構建工具的部分。 它應該是這樣的。

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) 您需要在 VisualStudioVersion 標記下方添加一行 VSToolsPath 使其看起來像這樣

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

參考鏈接: https : //alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/

這就是你所需要的。 只有 103MB。 不要安裝所有東西

在此處輸入圖片說明

我在MS connect上發現了這個:

是的,您需要在構建機器上安裝 Visual Studio 2010 來構建數據庫項目。 這樣做不需要額外的 Visual Studio 許可證。

所以,這是我目前唯一的選擇。

如果您使用的是 MSBuild,就像構建服務器一樣,對我有用的是:

更改以下內容:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

到:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

我的 Msbuild 命令是: *"C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

希望這可以幫助某人。

我的解決方案是這里的幾個答案的混合。

我檢查了構建服務器,已經安裝了Windows7/NET4.0 SDK,所以我確實找到了路徑:

C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v9.0\\WebApplications\\Microsoft.WebApplication.targets`

但是,在這一行:

<Import Project="$(MSBuildExtensionsPath)\\Microsoft\\VisualStudio\\v9.0\\WebApplications\\Microsoft.WebApplication.targets" />

$(MSBuildExtensionsPath)擴展到沒有路徑的C:\\Program Files\\MSBuild

因此,我所做的是使用以下命令創建一個符號鏈接:

mklink /J "C:\\Program Files\\MSBuild\\Microsoft\\VisualStudio" "C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio"

這樣 $(MSBuildExtensionsPath) 擴展到一個有效的路徑,應用程序本身不需要任何更改,只需要在構建服務器中(也許可以在每次構建時創建符號鏈接,以確保這一步不會丟失並且“記錄在案” ”)。

我通過添加解決了這個問題
/p:VCTargetsPath="C:\\Program Files\\MSBuild\\Microsoft.Cpp\\v4.0\\V120"

進入
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

我嘗試了一堆解決方案,但最終這個答案對我有用https : //stackoverflow.com/a/19826448/431522

它基本上需要從 MSBuild 目錄而不是 Visual Studio 目錄調用 MSBuild。

我還將 MSBuild 目錄添加到我的路徑中,以使腳本更易於編碼。

任何人來這里使用 Visual Studio 2017。我遇到了類似的問題,更新到 15.6.1 后無法編譯項目。 我必須安裝 MSBulild 工具,但錯誤仍然存​​在。

我能夠通過將v14.0文件夾從C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio復制到與v15.0相同的文件夾來解決這個問題,並解決了所有錯誤。 所以現在我的文件夾結構如下所示,其中兩個文件夾包含相同的內容。

在此處輸入圖片說明

如果您嘗試使用 VSTS 部署項目,則問題可能與檢查“Hosted Windows Container”選項而不是“Hosted VS2017”(或 18 等)有關:

在此處輸入圖片說明

  • 安裝微軟的 MSBuild 工具后,在環境變量中定義 MSBuild 路徑,這樣就可以從任何路徑運行。
  • 在任何記事本編輯器(如記事本++)中編輯 .csproj 文件,並注釋
  • 檢查以下元素,-->
    • 確保您只使用一次導入,選擇哪個有效。
    • 確保驅動器上存在以下文件夾,“C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v14.0”或 MSBuild 目標在“C:\\Program Files (x86) 引用的任何版本” \\MSBuild\\Microsoft\\VisualStudio\\v14.0\\WebApplications\\Microsoft.WebApplication.targets”
    • 在命令提示符下,運行以下命令,以檢查

C:>msbuild "C:\\\\DotnetCi.sln" /p:Configuration=Release /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false

我在 CI/CD 管道上構建 SQL Server 項目時遇到了這個問題。 事實上,我在本地也有它,我沒有設法解決它。

對我.dacpac是使用MSBuild SDK ,它能夠從一組 SQL 腳本生成 SQL Server 數據層應用程序包 ( .dacpac ),這意味着創建一個新項目。 但我想保留 SQL Server 項目,以便我可以通過 Visual Studio 上的 SQL Server 對象資源管理器將其鏈接到實時數據庫。 我采取了以下步驟來啟動並運行它:

  1. 使用.sql數據庫腳本保留我的 SQL Server 項目。
  2. 根據上述鏈接中的指南,創建了一個 .NET Standard 2.0 類庫項目,確保目標框架是 .NET Standard 2.0。
  3. .csproj的內容設置如下:

     <?xml version="1.0" encoding="utf-8"?> <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0"> <PropertyGroup> <SqlServerVersion>Sql140</SqlServerVersion> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> </Project>
  4. 我選擇 Sql140 作為 SQL Server 版本,因為我使用的是 SQL Server 2019。檢查此答案以找出與您正在使用的版本的映射。

  5. 在構建時忽略 SQL Server 項目,以便它在本地停止中斷(它確實在 Visual Studio 上構建,但在 VS Code 上失敗)。

  6. 現在我們只需要確保.sql文件在構建時位於 SDK 項目中。 我通過 CI/CD 管道上的一個簡單的 powershell 例程實現了這一點,該例程將文件從 SQL Server 項目復制到 SDK 項目:

Copy-Item -Path "Path.To.The.Database.Project\\dbo\\Tables\\*" -Destination (New-item -Name "dbo\\Tables" -Type Directory -Path "Path.To.The.DatabaseSDK.Project \\")

PS:這些文件必須物理地位於 SDK 項目中,無論是在根目錄中還是在某個文件夾中,因此.sdk SQL Server 項目中.sdk文件的鏈接將不起作用。 從理論上講,應該可以在預構建條件下復制這些文件,但由於某些晦澀的原因,這對我不起作用。 我還嘗試將.sql文件放在 SDK 項目中並將它們鏈接到 SQL Server 項目,但這很容易斷開與 SQL Server 對象資源管理器的鏈接,所以我決定也放棄它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM