[英]Microsoft.WebApplication.targets was not found during web application build
[英]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 種。 選擇一個最適合您的。
這是原始答案
現在,在 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)安裝,這實際上可能是解決刪除服務器上問題的更好方法。
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” .SqlTasks.targets 應該可以減輕安裝 Visual Studio 2010 的需要。但是,安裝 VS 2010 實際上可能會減少整體下載量和最終的工作量。
目標:構建代理無需更改/安裝
我在此處采用了 Lloyd的NuGet 方法的混合方法,該方法基於Andrik的提交二進制依賴項解決方案。
原因是我希望能夠添加新的構建代理,而無需使用諸如此類的項目預先配置它們。
[solution]\\packages\\MSBuild.Microsoft.VisualStudio.Web.targets.nn.nnn\\tools\\VSToolsPath\\
在第 7 版中,我執行了以下操作。 這可能沒有必要,根據評論,現在絕對不需要。 請參閱下面的評論。
env.VSToolsPath
添加一個構建參數並將其設置為 VSToolsPath 文件夾; 我用過..\\packages\\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\\tools\\VSToolsPath
如果您將 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 目錄添加到我的路徑中,以使腳本更易於編碼。
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 對象資源管理器將其鏈接到實時數據庫。 我采取了以下步驟來啟動並運行它:
.sql
數據庫腳本保留我的 SQL Server 項目。 .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>
我選擇 Sql140 作為 SQL Server 版本,因為我使用的是 SQL Server 2019。檢查此答案以找出與您正在使用的版本的映射。
在構建時忽略 SQL Server 項目,以便它在本地停止中斷(它確實在 Visual Studio 上構建,但在 VS Code 上失敗)。
現在我們只需要確保.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.