35

こんにちは、TeamCity でサーバーを構築しました。私のプロジェクトは Sitecore Web アプリケーションです。TDS(HedgehogDevelopment)を使用しています。MS ビルドを使用して TeamCity でビルド設定をセットアップしましたが、ビルド構成マネージャーで TDS プロジェクトが無効になっているときに機能しているように見えます。しかし、それが有効になり、ネットエラーが発生しています

C:\Program Files (x86)\MSBuild\HedgehogDevelopment\SitecoreProject\v9.0\HedgehogDevelopment.SitecoreProject.targets(310, 5): エラー MSB4036: "TransformXml" タスクが見つかりませんでした。以下を確認してください: 1.) プロジェクト ファイル内のタスクの名前がタスク クラスの名前と同じである。2.) タスク クラスは "パブリック" であり、Microsoft.Build.Framework.ITask インターフェイスを実装します。3.) プロジェクト ファイル、または "C:\Windows\Microsoft.NET\Framework64\v3.5" ディレクトリにある *.tasks ファイルで、タスクが正しく宣言されている。プロジェクト NetKey.TDSMaster\MyProject.TDSMaster.scproj が失敗しました。プロジェクト Website\MyProject.sln に失敗しました

エラーの説明のヘルプは、私には当てはまりません。ビルド マシンに VS 2012 がありません。Web プロジェクトをサポートするために Microsoft Visual Studio 2012 Shell をインストールしました。それを解決する方法? ありがとう。

4

9 に答える 9

25

TransformXMLASP.NET Web 発行ツールの一部として提供されます。そのため、通常はビルド サーバーに Visual Studio がインストールされており、Visual Studio の Shell バージョン以上のものを必要とします。Visual Studio Express Web Edition をインストールすることでもうまくいくかもしれません。

Web-Deployパッケージをインストールしてみて、十分かどうかを確認することもできますが、通常はビルド エージェントに Visual Studio のフル バージョンをインストールするだけです。これは、MSDN サブスクリプション ライセンスの下では合法です。

いくつかの実験の後、これらのタスクを正式な方法でインストールするには、ビルド サーバーに少なくとも Visual Studio Web Developer Tools をインストールする必要があることがわかりました。Visual Studio Express Web Edition をインストールするだけで十分だと思います。

ここに画像の説明を入力

于 2013-05-20T10:34:24.090 に答える
19

Short Answer - Explicitly Import

What I had to do:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />

Long Answer

When you do File -> New Web Project in VS2013 you get the following inside your *.csproj file:

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

The $(VisualStudioVersion) always evaluated to 11.0 for me on build machines and on multiple development machines. Even on machines with VS2013, which is 12.0.

Diving into that I found that in the Microsoft.WebApplication.targets from above, it has a line to import the file we really want Microsoft.Web.Publishing.targets only if it exists like so on line 377:

<!--Import publishing target-->
<Import Project="..\Web\Microsoft.Web.Publishing.targets" Condition="Exists('..\Web\Microsoft.Web.Publishing.targets')" />

So to me this is an implicit import of Microsoft.Web.Publishing.targets.

The problem is that if this file doesn't exist, it does nothing and you do not know about it until you get the error when trying to use the TransformXml task.

Installing VS2013 did not install Microsoft.Web.Publishing.targets in the 11.0 directory. It did install it in the 12.0 directory. I'm guessing if I installed VS2012, it would do it.

In any case, I was able to solve it by explicitly importing Microsoft.Web.Publishing.targets from the 12.0 directory if it didn't exist and wasn't implicitly imported by Microsoft.WebApplication.targets like so:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
于 2014-11-26T18:20:00.417 に答える
7

Visual Studioのバージョンがたくさんある場合は、これを試してください

VS2015

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

VS 2017

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

VS 2019

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

<Target Name="TransformConfig">
    <MakeDir Directories="$(TargetDir)" Condition="  Exists('$(TargetPath)') == False " />
    <TransformXml Source="app.config"
        Transform="app.$(Configuration).config"
        Destination="$(TargetPath).config" />
</Target>

于 2019-09-30T11:46:27.407 に答える
2

提供されているソリューションは、VS を IDE として使用する場合に機能するように見えますが、CLI 経由または UNIX ベースのシステムで DotnetCore を使用する場合、これは機能しません。

以下が機能しているように見えることがわかりました

  <PropertyGroup>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' == 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net5.0/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' != 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net472/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="!Exists($(XmlTransformDllPath))">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll</XmlTransformDllPath>
  </PropertyGroup>
  <UsingTask TaskName="TransformXml" AssemblyFile="$(XmlTransformDllPath)" />

このソリューションでは、ネットコア、フル .net が考慮されます

何らかの理由MSBuildSDKsPathで、MSBuildExtensionsPath32CLI と VS2019 を使用する場合、Windows では異なります

CLI: MSBuildSDKsPath = C:\Program Files\dotnet\sdk\5.0.103\Sdks MSBuildExtensionsPath32 =C:\Program Files\dotnet\sdk\5.0.103

Vs2019 MSBuildSDKsPath = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks MSBuildExtensionsPath32 =C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild

私のMacではどれが返されますか/usr/local/share/dotnet/sdk/5.0.201

私が見る唯一の問題は、tools/net5.0これまでに変更された名前の部分にあることです

于 2021-03-22T14:58:18.387 に答える
0

サーバーにビジュアル スタジオがありません。msbuild のみをインストールしました。問題を解決するために、"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web に "Web" フォルダーがないことがわかりました。したがって、システムにインストールされたビジュアルスタジオからこのフォルダーをコピーしてサーバーに貼り付けたところ、問題が解決しました。

于 2021-11-15T10:03:28.310 に答える