แก้ไขปัญหา sgen.exe
ล้มเหลวในการสร้างใน Visual Studio
หากคุณประสบปัญหากับ sgen.exe
ที่ล้มเหลวในกระบวนการสร้าง ใน Visual Studio คุณไม่ได้อยู่คนเดียว นักพัฒนาหลายคนพบว่าตนต้องต่อสู้กับข้อผิดพลาดนี้ โดยเฉพาะอย่างยิ่งหลังจากการเปลี่ยนไดเรกทอรีเอาต์ของโครงการ บทแนะนำนี้จะช่วยให้คุณเข้าใจปัญหาและให้วิธีแก้ไขที่มีประสิทธิภาพในการแก้ไขมัน
เข้าใจปัญหา
การเปลี่ยนไดเรกทอรีเอาต์ของโครงการ Visual Studio ของคุณอาจทำให้ sgen.exe
ล้มเหลวด้วยข้อผิดพลาดต่อไปนี้:
Error: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): error MSB6006: "sgen.exe" exited with code 1.
ข้อผิดพลาดนี้มักเกิดขึ้นเนื่องจากพาธที่ส่งไปยัง sgen.exe
ในการตั้งค่าการสร้างยังคงไม่เปลี่ยนแปลงหลังจากการเปลี่ยนไดเรกทอรีเอาต์
อาการของปัญหา
- กระบวนการสร้างล้มเหลว โดยโยนข้อผิดพลาดที่เกี่ยวข้องกับ
sgen.exe
- แม้หลังจากการปรับเปลี่ยนการตั้งค่าคอนฟิก ข้อผิดพลาดก็ยังคงอยู่
- วิธีการแก้ไขชั่วคราวอาจปิดการใช้งานฟีเจอร์ที่สำคัญ เช่น การสร้างการทำให้เป็นอนุกรม
วิธีการแก้ไขปัญหา
วิธีการที่ 1: การกำหนดค่าด้วยตนเองของ sgen.exe
อีกวิธีที่มีประสิทธิภาพในการแก้ไขปัญหานี้คือการปรับเปลี่ยนพารามิเตอร์สำหรับ sgen.exe
ในไฟล์โครงการของคุณด้วยตนเอง
ขั้นตอนในการปรับแต่งตัวเลือก sgen.exe
:
-
เปิดไฟล์โครงการของคุณ
ใช้โปรแกรมแก้ไขข้อความที่คุณเลือกเพื่อเปิดไฟล์.csproj
หรือ.vbproj
-
ปรับเปลี่ยนการกำหนดเป้าหมาย
คุณสามารถเพิ่มเป้าหมายที่บอกให้sgen.exe
กำหนดตัวเลือกการสร้างอนุกรมอย่างชัดเจน โดยตัวอย่างโค้ดคือ:<Target Name="GenerateSerializationAssembliesForAllTypes" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)"> <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="true" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)"> <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" /> </SGen> </Target>
-
ล็อคการเปลี่ยนแปลง
ตรวจสอบให้แน่ใจว่าคุณตั้งค่า UseProxyTypes เป็นtrue
ซึ่งจะช่วยให้คุณควบคุมวิธีการที่ประเภทต่างๆ ถูกทำให้เป็นอนุกรม -
สร้างโปรเจ็กต์ของคุณใหม่
เมื่อบันทึกการเปลี่ยนแปลงแล้ว ให้สร้างโปรเจ็กต์ของคุณใหม่ใน Visual Studio เพื่อใช้การกำหนดค่าที่ใหม่
วิธีการที่ 2: อ้างอิงเอกสาร
เพื่อความเข้าใจที่ดีขึ้นและการปรับแต่งเพิ่มเติม ควรพิจารณาอ้างอิงเอกสาร MSDN เกี่ยวกับ sgen.exe
ซึ่งมีตัวเลือกและพารามิเตอร์ฉบับละเอียดสำหรับเครื่องมือ
แหล่งข้อมูลเพิ่มเติมสามารถพบได้ใน บล็อกโพสต์นี้ ที่พูดคุยเกี่ยวกับรายละเอียดของ sgen
และเคล็ดลับในการจัดการการทำให้เป็นอนุกรมอย่างมีประสิทธิภาพ
ข้อแนะนำเพิ่มเติม
-
ลบ
.XmlSerializers.dll
ก่อนหน้า
หากคุณยังคงพบปัญหา ให้พิจารณาลบไฟล์.XmlSerializers.dll
ในไดเรกทอรีเอาต์เพื่อให้แน่ใจว่ามีการเริ่มใหม่ -
ตรวจสอบอีกครั้งเพื่อให้แน่ใจว่ามีการอ้างอิงที่ถูกต้อง
ตรวจสอบให้แน่ใจว่าทุกพาธไปยัง assembly ที่มีความเกี่ยวข้องยังคงถูกต้องหลังจากการเปลี่ยนตำแหน่งเอาต์พุต
สรุป
การเผชิญหน้ากับความล้มเหลวของ sgen.exe
อาจทำให้รู้สึกยุ่งยาก โดยเฉพาะในช่วงเวลาที่พัฒนาอย่างเข้มข้น ด้วยการปรับแต่งไฟล์โครงการของคุณและจัดการการกำหนดค่าอย่างรอบคอบ คุณสามารถแก้ไขปัญหาดังกล่าวอย่างมีประสิทธิภาพ อย่าลืมสำรองไฟล์โครงการเดิมของคุณก่อนที่จะแก้ไขที่สำคัญ
ด้วยกลยุทธ์เหล่านี้ คุณควรจะมีอุปกรณ์ที่จำเป็นในการจัดการและป้องกันข้อผิดพลาดในการสร้างที่เกี่ยวข้องกับ sgen.exe
ใน Visual Studio!