Không thể tải tác vụ TransformXml từ Microsoft.Web.Publishing.Tasks.dll


95

Có ai gặp lỗi này và biết cách khắc phục nó không?

Không thể tải tác vụ "TransformXml" từ lắp ráp C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll.

Không thể tải tệp hoặc tập hợp 'tệp: /// C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định.

Xác nhận rằng khai báo là chính xác, rằng assembly và tất cả các phụ thuộc của nó đều khả dụng và tác vụ chứa một lớp công khai triển khai Microsoft.Build.Framework.ITask.

Tôi đọc ở nơi khác rằng vấn đề là khi bạn chưa cài đặt SQL Server. Nhưng tôi đã cài đặt SQL Express 2012 x64 với SP1. Tôi cũng đang chạy VS 2013 Professional.

Tôi đã chạy giải pháp tương tự chính xác này trong VS 2012 express mà không có vấn đề gì.


1
Đây phải là một gói nuget. Tôi không thích điều này tham chiếu ẩn bên trong dự án của tôi.
Jaider

Bạn nên đánh dấu câu trả lời từ Benjamin Scheibe là câu trả lời đúng. Nó có vẻ là giải pháp tốt nhất
BHuelse

Câu trả lời:


163

Các câu trả lời được cung cấp bởi Dai Bok và emalamisura hoạt động tốt miễn là bạn sử dụng Visual Studio 2012. Đối với VS 2013, điều này cũng không thành công. Để làm cho điều này hoạt động với tất cả các phiên bản của Visual Studio, bạn nên:

  • Mở tệp dự án (.csproj) của dự án không tải được
  • Tìm kiếm <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • Thay đổi nó thành <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • Tải lại dự án

Điều đó sẽ đặt đúng phiên bản Visual Studio động và đúng cách.


2
Tôi như giải pháp của bạn Benjamin, nhưng vấn đề tôi gặp phải là các thư mục v11 đã mất tích, possiblly vì chúng tôi có một số người sử dụng VS2010 và chưa nâng cấp lên vs2012 chưa
Đại Bok

7
Điều này giúp tôi bắt đầu trên con đường đúng đắn, nhưng thay đổi tôi đã thực hiện là đối với nút <usingTask TaskName = "TransformXml" ...>. AssemblyFile của tôi đang sử dụng phiên bản sai. Chỉ cần thay đổi phiên bản ở đây. Một tùy chọn khác sẽ là sử dụng macro phiên bản thay vì thiết lập phiên bản một cách rõ ràng.
Scott

5
$(VisualStudioVersion)đang trở lại phiên bản cũ hơn :(
Jaider

1
Đây có thể là một tham số: stackoverflow.com/questions/20002532/…
Jaider

2
Hoạt động hoàn hảo khi nâng cấp từ VS2015 lên VS2017. Bây giờ tôi có thể mở giải pháp trong cả hai IDE.
Yury Schkatula,

29

Để bắt đầu hoạt động, tôi chỉ cần sao chép v10.0thư mục của mình và đổi tên nó thành v11.0, và mọi thứ dường như hoạt động tốt từ đó trở đi. Đó là giải pháp nhanh chóng cho bây giờ.

Vì đây có lẽ không phải là giải pháp tốt nhất và mặc dù nó hoạt động, tôi sẽ thử cài đặt Microsoft Windows SDK cho Windows 7 và .NET Framework 4 Windows SDK cho Windows 7 và .NET Framework 4, nhưng sẽ mất nhiều thời gian để Tải xuống.


1
Tôi không thấy thư mục 'Web' trong v10.0. Vì vậy, tôi đã sao chép nó từ thư mục v12.0 sang thư mục v11.0.
Sundeep

9

Tôi đã đấu tranh với sự cố này trên máy chủ xây dựng của chúng tôi trong vài ngày, vì vậy tôi nghĩ rằng tôi sẽ ghi lại giải pháp mà tôi đã đạt được. Đầu tiên, máy chủ xây dựng của tôi đã cài đặt các tiện ích mở rộng xuất bản web . Tôi có thể sử dụng tác vụ TransformXml cho nội dung của trái tim tôi bên trong một dự án ứng dụng web.

Để sử dụng nó bên ngoài dự án ứng dụng web, tôi đã cố gắng thêm phần tử usingTask vào dự án của mình và trỏ nó đến đúng vị trí bằng cách sử dụng thuộc tính xây dựng ms (như Benjamin đã trình bày). Tuy nhiên, chúng không có trên máy chủ xây dựng của tôi (những người có quyền truy cập dễ dàng vào hệ thống tệp của máy chủ xây dựng của họ có thể bỏ qua điều này và chỉ cần cài đặt gói có liên quan vào Visual Studio). Tôi thậm chí đã tiến xa đến các phiên bản phòng thu trực quan bằng mã cứng, nhưng nó luôn bỏ lỗi đó cho tôi.

Cuối cùng tôi đã từ bỏ, kéo các tệp DLL từ PC cục bộ của mình:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.XmlTransform.dll

Tôi đã tải chúng lên kiểm soát nguồn và thêm thư mục đó vào không gian làm việc của bản dựng của tôi (Chỉnh sửa Định nghĩa Bản dựng -> Cài đặt Nguồn -> Thư mục Điều khiển Nguồn). Từ đó, tôi thậm chí không cần tham chiếu đến thư mục - đây là giao diện của usingTask của tôi:

  <UsingTask TaskName="TransformXml" AssemblyFile="Microsoft.Web.Publishing.Tasks.dll" />

Bây giờ tôi có thể sử dụng tác vụ TransformXml cho nội dung của trái tim tôi từ bất kỳ dự án nào.


9
Các MSBuild.Microsoft.VisualStudio.Web.targets gói có các chỉ tiêu cần thiết để xây dựng mà không cần cài đặt VS. Ví dụ: <usingTask TaskName = "TransformXml" AssemblyFile = "package \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Xem này blog cho biết thêm chi tiết
moonpatrol

1
Này @moonpatrol, bạn nên làm cho nó một câu trả lời, vì tôi thích cách này hơn - cài đặt gói và sau đó giới thiệu nó - giải pháp hoàn toàn phổ biến :-) Tôi vừa thử nó và hoạt động hoàn hảo. Cảm ơn bạn anyway! nếu bạn biến nó thành câu trả lời, chỉ cần ping tôi và tôi sẽ bỏ phiếu.
Tengiz

9

Để khắc phục sự cố,

  1. Tìm Trình cài đặt Visual studio trong máy tính của bạn
  2. Bấm hoặc chạm để khởi động trình cài đặt, sau đó chọn Sửa đổi.
  3. Từ màn hình Thành phần riêng lẻ, chọn Asp.net và các công cụ phát triển web, sau đó chọn Sửa đổi / Cài đặt.

Điều này đã giải quyết được vấn đề vì nó tạo ra dll trong đường dẫn đã đề cập.


2
Tôi đang sử dụng VS2017 và việc thực hiện bước này không tạo ra các tệp đó. Tôi nghĩ có thể một cái gì đó khác mà bạn đã chọn (hoặc kết hợp với ASP.net và các công cụ phát triển web) đã thêm nó. Tuy nhiên, không chắc chắn điều gì :(
Kris

Tôi chỉ chọn cái đó. Hãy thử chọn các thành phần liên quan đến Web và cài đặt. Chúc may mắn.
Vinodhini Ramasamy

Tôi vừa thử toàn bộ quy trình làm việc trên web và vẫn không có các tệp đó. Tôi cảm thấy như giải pháp này là rất gần. Rất mong nó có thể được pin chỉ kể từ khi tôi có không gian hạn chế trên HDD của tôi để cài đặt các thành phần
Robert Snyder

4
Đối với VS2017, tôi đã làm Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Điều này dường như đã thực hiện thủ thuật.
John Jones

5

Vì chỉ có v12.0, v14.0 và v15.0 trong thư mục VisualStudio của tôi, tôi chỉnh sửa tệp dự án của mình và thay đổi đường dẫn tham chiếu từ v10.0 sang v14.0. Sau đó, dự án xây dựng thành công.

Trước:

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

Sau:

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

5

Đối với VS2019

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion

Tôi thay thế MSBuildToolsVersionbằng VisualStudioVersion.


Bằng tài liệu này " docs.microsoft.com/visualstudio/msbuild/… " thay đổi MSBuildToolsVersion bằng VisualStudioVersion sau đó tôi thay đổi khả năng hoạt động tốt như sau " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won

2

Câu trả lời chính xác cho điều này là dỡ bỏ dự án được đề cập và sau đó chỉnh sửa tệp csproj, tìm mục nhập mà chúng đang tham chiếu đến đường dẫn 10.0 và thay vào đó thay đổi nó thành điểm 11.0.


+ 1 cho điều đó. Tôi đã gây ra sự cố này khi sao chép các thư mục không gian công việc của mình từ một máy dev sang máy khác. Máy phát triển thứ hai đã cài đặt v11, không phải v10. Do đó, thư mục v10 đã trống.
maplemale

1

Bạn cần hai điều để làm cho nó hoạt động:

1) Cài đặt Công cụ xây dựng Visual Studio (Bạn không cần toàn bộ Visual Studio, chỉ có Công cụ xây dựng VS) với tùy chọn "Công cụ xây dựng phát triển web" đã chọn trên máy chủ xây dựng của bạn https://www.visualstudio.com/pl/thank -you-download-visual-studio /? sku = BuildTools & rel = 15

2) Đảm bảo rằng đường dẫn đến Microsoft.Web.Publishing.Tasks.dll là chính xác

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />

1

Đối với tôi, nó bắt đầu hoạt động chỉ bằng cách thêm tham chiếu vào gói NuGet MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3

Thậm chí không cần thêm phần tử usingTask vào tệp dự án như tác giả gói đã đề cập

https://github.com/pdonald/nuget-webtargets

Chỉ cần cài đặt gói NuGet. Gói tự động đặt thuộc tính $ (VSToolsPath) để sử dụng tệp mục tiêu trong thư mục công cụ.

Và sau đó, tôi có thể sử dụng TransformXml và các tác vụ khác, được xác định trong gói, chẳng hạn như để chuyển đổi app.config

  <Target Name="app_config_AfterCompile" AfterTargets="AfterCompile" Condition="Exists('app.$(Configuration).config')">
    <!--Generate transformed app config in the intermediate directory-->
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    <!--Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="App.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

0

Chỉ trong trường hợp ai đó đang sử dụng csproj kiểu SDK, bạn có thể đạt được điều này mà không cần phải cài đặt Visual Studio trên máy chủ xây dựng.

  1. Trước tiên, bạn nên cài đặt gói phần mềm SlowCheetah cho dự án của mình. Sau khi cài đặt, bạn sẽ thấy thông tin sau trong dự án kiểu SDK của mình.

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. Sau đó, đảm bảo bạn thêm thuộc tính GeneratePathProperty = "true" (xem bên dưới). Điều này rất quan trọng cho phần tiếp theo vì nó sẽ giúp bạn nắm bắt được đường dẫn nơi gói nuget được khôi phục trên máy của bạn. George Dangl giải thích điều đó trong bài báo của mình ở đây .

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. Nhập các mục tiêu SlowCheetah vào dự án của bạn:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. Bây giờ bạn có thể sử dụng lệnh đích (trong trường hợp này là sau khi xuất bản) để áp dụng một số biến đổi tùy chỉnh. Nếu cần, bạn luôn có thể mã hóa cố định tên tệp bên dưới thay vì sử dụng các biến trong ví dụ dưới đây.

    <Target Name="AfterPublishs" AfterTargets="Publish">
         <TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
    </Target>
    

Nếu bạn chưa sử dụng SlowCheetah trước đây, tôi khuyên bạn nên kiểm tra nó. Họ có một tiện ích mở rộng Visual Studio sẽ giúp bạn xem trước các tệp biến đổi dễ dàng hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.