ไม่สามารถโหลดงาน TransformXml จาก Microsoft.Web.Publishing.Tasks.dll


96

มีใครเห็นข้อผิดพลาดนี้และรู้วิธีแก้ไขหรือไม่?

ไม่สามารถโหลดงาน "TransformXml" จากแอสเซมบลี C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll

ไม่สามารถโหลดไฟล์หรือไฟล์แอสเซมบลี: /// C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll 'หรือการอ้างอิงอย่างใดอย่างหนึ่ง ระบบไม่พบแฟ้มที่ระบุ.

ยืนยันว่าการประกาศนั้นถูกต้องมีแอสเซมบลีและการอ้างอิงทั้งหมดพร้อมใช้งานและงานนั้นมีคลาสสาธารณะที่ใช้ Microsoft.Build.Framework.ITask

ฉันอ่านที่อื่นพบว่าปัญหาคือเมื่อคุณไม่ได้ติดตั้ง SQL Server แต่ฉันมี SQL Express 2012 x64 ที่ติดตั้ง SP1 ฉันใช้ VS 2013 Professional ด้วย

ฉันใช้วิธีแก้ปัญหาเดียวกันนี้ใน VS 2012 express โดยไม่มีปัญหา


1
นี่ควรเป็นแพ็กเกจนักเก็ต ฉันไม่ชอบการอ้างอิงที่ซ่อนอยู่ในโครงการของฉัน
Jaider

คุณควรทำเครื่องหมายคำตอบจาก Benjamin Scheibe ว่าเป็นคำตอบที่ถูกต้อง ดูเหมือนว่าจะเป็นทางออกที่ดีที่สุด
BHuelse

คำตอบ:


166

คำตอบจาก Dai Bok และ emalamisura ใช้งานได้ดีตราบเท่าที่คุณใช้ Visual Studio 2012 สำหรับ VS 2013 สิ่งนี้ล้มเหลวเช่นกัน เพื่อให้สามารถใช้งานได้กับ Visual Studio ทุกเวอร์ชันคุณควร:

  • เปิดไฟล์โปรเจ็กต์ (.csproj) ของโปรเจ็กต์ที่โหลดไม่สำเร็จ
  • ค้นหา <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • เปลี่ยนเป็น <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • โหลดโครงการซ้ำ

ซึ่งจะตั้งค่าเวอร์ชันที่ถูกต้องของ Visual Studio แบบไดนามิกและเหมาะสม


2
ฉันชอบวิธีแก้ปัญหาของคุณ Benjamin แต่ปัญหาที่ฉันพบคือโฟลเดอร์ v11 หายไปอาจเป็นเพราะเรามีคนใช้ vs2010 และยังไม่ได้อัปเกรดเป็น vs2012 เลย
Dai Bok

7
สิ่งนี้ทำให้ฉันเริ่มต้นในเส้นทางที่ถูกต้อง แต่การเปลี่ยนแปลงที่ฉันทำคือโหนด <UsingTask TaskName = "TransformXml" ... > AssemblyFile ของฉันใช้เวอร์ชันที่ไม่ถูกต้อง จำเป็นต้องเปลี่ยนเวอร์ชันที่นี่ อีกทางเลือกหนึ่งคือการใช้มาโครเวอร์ชันแทนการตั้งค่าเวอร์ชันอย่างชัดเจน
Scott

5
$(VisualStudioVersion)กำลังส่งคืนเวอร์ชันก่อนหน้า :(
Jaider

1
สามารถเป็นพารามิเตอร์: stackoverflow.com/questions/20002532/…
Jaider

2
ทำงานได้อย่างสมบูรณ์แบบขณะอัปเกรดจาก VS2015 เป็น VS2017 ตอนนี้ฉันสามารถเปิดโซลูชันได้ใน IDE ทั้งสอง
Yury Schkatula

29

เพื่อให้ฉันทำงานได้ฉันแค่คัดลอกv10.0โฟลเดอร์ของฉันและเปลี่ยนชื่อเป็นv11.0และสิ่งต่างๆดูเหมือนจะทำงานได้ดีนับจากนั้นเป็นต้นมา นั่นเป็นการแก้ไขด่วนสำหรับตอนนี้

เนื่องจากนี่อาจไม่ใช่ทางออกที่ดีที่สุดและถึงแม้ว่าจะได้ผลฉันจะลองติดตั้ง Microsoft Windows SDK สำหรับ Windows 7 และ. NET Framework 4 Windows SDK สำหรับ Windows 7 และ. NET Framework 4 แต่ใช้เวลานานในการ ดาวน์โหลด.


1
ฉันไม่เห็นโฟลเดอร์ "เว็บ" ใน v10.0 ดังนั้นฉันจึงคัดลอกจากโฟลเดอร์ v12.0 ไปยังโฟลเดอร์ v11.0
อาทิตย์

10

ในการแก้ไขปัญหา

  1. ค้นหาโปรแกรมติดตั้ง Visual Studio ในคอมพิวเตอร์ของคุณ
  2. คลิกหรือแตะเพื่อเริ่มโปรแกรมติดตั้งจากนั้นเลือกปรับเปลี่ยน
  3. จากหน้าจอ Individual Components เลือก Asp.net และเครื่องมือพัฒนาเว็บจากนั้นเลือก Modify / Install

สิ่งนี้แก้ไขปัญหาได้เนื่องจากสร้าง dll ในเส้นทางที่กล่าวถึง


2
ฉันใช้ VS2017 และการดำเนินการขั้นตอนนี้ไม่ได้สร้างไฟล์เหล่านั้น ฉันคิดว่าอาจเป็นอย่างอื่นที่คุณเลือก (หรือใช้ร่วมกับ ASP.net และเครื่องมือพัฒนาเว็บ) ที่เพิ่มเข้ามา ไม่แน่ใจว่าเป็นอย่างไร :(
คริส

ฉันเลือกเฉพาะที่ ลองเลือกส่วนประกอบที่เกี่ยวข้องกับเว็บและติดตั้ง ขอให้โชคดี
Vinodhini Ramasamy

ฉันเพิ่งลองใช้เวิร์กโฟลว์ทั้งหมดของเว็บและยังไม่มีไฟล์เหล่านั้น ฉันรู้สึกว่าโซลูชันนี้อยู่ใกล้มาก หวังว่าจะสามารถชี้หมุดได้เนื่องจากฉันมีพื้นที่ จำกัด บน HDD เพื่อติดตั้งส่วนประกอบ
Robert Snyder

4
สำหรับ VS2017 Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools ผม ดูเหมือนจะทำเคล็ดลับแล้ว
John Jones

9

ฉันได้ต่อสู้กับปัญหานี้ในบิลด์เซิร์ฟเวอร์ของเรามาหลายวันแล้วดังนั้นฉันจึงคิดว่าฉันจะบันทึกความละเอียดที่ได้รับมา ครั้งแรกที่สร้างเซิร์ฟเวอร์ของฉันมีส่วนขยายการเผยแพร่เว็บที่ติดตั้ง ฉันสามารถใช้งาน TransformXml กับเนื้อหาในใจของฉันภายในโปรเจ็กต์เว็บแอปพลิเคชัน

ในการใช้งานนอกโปรเจ็กต์เว็บแอปพลิเคชันฉันพยายามเพิ่มองค์ประกอบ UsingTask ในโปรเจ็กต์ของฉันและชี้ไปยังตำแหน่งที่ถูกต้องโดยใช้คุณสมบัติการสร้าง ms (ดังที่เบนจามินแสดงให้เห็น) อย่างไรก็ตามพวกเขาไม่ได้อยู่ในเซิร์ฟเวอร์บิลด์ของฉัน (ผู้ที่เข้าถึงระบบไฟล์ของบิลด์เซิร์ฟเวอร์ได้ง่ายอาจข้ามสิ่งนี้ไปได้และเพียงแค่ติดตั้งแพ็คเกจที่เกี่ยวข้องไปยัง Visual Studio) ฉันไปไกลถึงเวอร์ชันฮาร์ดโค้ดวิชวลสตูดิโอ แต่มันก็ทิ้งข้อผิดพลาดนั้นไว้กับฉันเสมอ

ในที่สุดฉันก็ยอมแพ้ดึง DLL จากพีซีในพื้นที่ของฉัน:

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

ฉันอัปโหลดไปยังตัวควบคุมแหล่งที่มาและเพิ่มโฟลเดอร์นั้นในพื้นที่ทำงานของบิลด์ของฉัน (แก้ไขคำจำกัดความของโครงสร้าง -> การตั้งค่าแหล่งที่มา -> โฟลเดอร์ควบคุมแหล่งที่มา) จากนั้นฉันไม่จำเป็นต้องอ้างอิงโฟลเดอร์ด้วยซ้ำ - นี่คือลักษณะการใช้งานของฉัน:

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

ตอนนี้ฉันสามารถใช้งาน TransformXml กับเนื้อหาในดวงใจจากโปรเจ็กต์ใดก็ได้


9
MSBuild.Microsoft.VisualStudio.Web.targetsแพคเกจมีเป้าหมายที่จำเป็นในการสร้างได้โดยไม่ต้องติดตั้ง VS ตัวอย่าง: <UsingTask TaskName = "TransformXml" AssemblyFile = "package \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" /> ดูบล็อกนี้สำหรับรายละเอียดเพิ่มเติม
moonpatrol

1
เฮ้ @moonpatrol คุณควรให้คำตอบเพราะฉันชอบวิธีนี้ - การติดตั้งแพคเกจแล้วอ้างอิง - วิธีแก้ปัญหาที่เป็นสากลอย่างแท้จริง :-) ฉันเพิ่งลองใช้และทำงานได้อย่างสมบูรณ์ ขอบคุณต่อไป! ถ้าคุณให้คำตอบเพียงแค่ ping ฉันและฉันจะลงคะแนน
Tengiz

6

สำหรับ VS2019

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

ฉันแทนที่MSBuildToolsVersionด้วยVisualStudioVersion.


โดยเอกสารนี้ " docs.microsoft.com/visualstudio/msbuild/… " เปลี่ยนMSBuildToolsVersionด้วยVisualStudioVersionดังนั้นฉันจึงเปลี่ยนความเหมาะสมที่ทำงานได้ดีเช่นนี้ " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won

5

เนื่องจากมีเพียง v12.0, v14.0 และ v15.0 ในโฟลเดอร์ VisualStudio ของฉันฉันจึงแก้ไขไฟล์โครงการของฉันและเปลี่ยนเส้นทางอ้างอิงจาก v10.0 เป็น v14.0 จากนั้นโครงการจะสร้างสำเร็จ

ก่อน:

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

หลังจาก:

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

2

คำตอบที่ถูกต้องคือการยกเลิกการโหลดโปรเจ็กต์ที่เป็นปัญหาจากนั้นแก้ไขไฟล์ csproj ค้นหารายการที่พวกเขาอ้างถึงเส้นทาง 10.0 และเปลี่ยนเป็นชี้ไปที่ 11.0 แทน


+1 สำหรับสิ่งนั้น ฉันทำให้เกิดปัญหานี้เมื่อฉันคัดลอกโฟลเดอร์พื้นที่ทำงานจากเครื่อง dev เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง เครื่อง dev เครื่องที่สองติดตั้ง v11 ไม่ใช่ v10 ดังนั้นโฟลเดอร์ v10 จึงว่างเปล่า
maplemale

1

คุณต้องมีสองสิ่งเพื่อให้มันใช้งานได้:

1) ติดตั้ง Visual Studio Build Tools (คุณไม่จำเป็นต้องใช้ Visual Studio ทั้งหมดมีเพียง VS Build Tools) พร้อมด้วยตัวเลือก "Web development build tools" ที่เลือกบนบิลด์เซิร์ฟเวอร์ของคุณ https://www.visualstudio.com/pl/thank -you-download-visual-studio /? sku = BuildTools & rel = 15

2) ตรวจสอบว่าพา ธ ไปยัง Microsoft.Web.Publishing.Tasks.dll ถูกต้อง

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

1

สำหรับฉันมันเริ่มทำงานเพียงแค่เพิ่มการอ้างอิงไปยังแพ็คเกจ NuGet MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3

ไม่จำเป็นต้องเพิ่มองค์ประกอบ UsingTask ลงในไฟล์โครงการตามที่ผู้เขียนแพ็กเกจกล่าวถึง

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

เพียงติดตั้งแพ็คเกจ NuGet แพ็กเกจตั้งค่าคุณสมบัติ $ (VSToolsPath) โดยอัตโนมัติเพื่อใช้ไฟล์เป้าหมายในโฟลเดอร์เครื่องมือ

จากนั้นฉันก็สามารถใช้ TransformXml และงานอื่น ๆ ที่กำหนดไว้ในแพ็คเกจเช่นแปลง 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

ในกรณีที่มีคนใช้ csproj แบบ SDK คุณสามารถทำได้โดยไม่ต้องติดตั้ง Visual Studio บนเซิร์ฟเวอร์ build

  1. ก่อนอื่นคุณควรติดตั้งแพคเกจ SlowCheetah nugetในโครงการของคุณ เมื่อคุณติดตั้งแล้วคุณจะเห็นสิ่งต่อไปนี้ในโปรเจ็กต์สไตล์ SDK ของคุณ

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. จากนั้นตรวจสอบให้แน่ใจว่าคุณได้เพิ่มแอตทริบิวต์GeneratePathProperty = "true" (ดูด้านล่าง) นี่เป็นสิ่งสำคัญมากสำหรับส่วนถัดไปเพราะจะช่วยให้คุณคว้าเส้นทางที่จะคืนค่าแพ็คเกจนักเก็ตบนเครื่องของคุณ จอร์จ Dangl อธิบายของเขาในบทความที่นี่

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. นำเข้าเป้าหมาย SlowCheetah ในโครงการของคุณ:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. ตอนนี้คุณสามารถใช้คำสั่งเป้าหมาย (ในกรณีนี้หลังจากเผยแพร่) เพื่อใช้การแปลงแบบกำหนดเองบางอย่าง หากต้องการคุณสามารถฮาร์ดโค้ดชื่อไฟล์ด้านล่างได้ตลอดเวลาแทนที่จะใช้ตัวแปรในตัวอย่างด้านล่าง

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

หากคุณไม่เคยใช้SlowCheetahมาก่อนขอแนะนำให้ลองดู พวกเขามีส่วนขยาย Visual Studio ที่จะช่วยให้คุณดูตัวอย่างไฟล์แปลงร่างได้ง่ายขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.