ฉันมีสี่โครงการในโซลูชัน Visual Studio ของฉัน (ทุกคนกำหนดเป้าหมาย. NET 3.5) - สำหรับปัญหาของฉันมีเพียงสองโครงการเท่านั้นที่สำคัญ:
- MyBaseProject <- ไลบรารีคลาสนี้อ้างอิงถึงไฟล์ DLL ของบุคคลที่สาม (elmah.dll)
- MyWebProject1 <- โครงการเว็บแอปพลิเคชันนี้มีการอ้างอิงถึง MyBaseProject
ฉันเพิ่มการอ้างอิงelmah.dllในMyBaseProjectใน Visual Studio 2008 โดยคลิกที่ "เพิ่มการอ้างอิง ... " → "เรียกดู" แท็บ→เลือก "elmah.dll"
คุณสมบัติของการอ้างอิง Elmah มีดังนี้:
- นามแฝง - ทั่วโลก
- คัดลอกภายใน - จริง
- วัฒนธรรม -
- คำอธิบาย - ข้อผิดพลาดการบันทึกโมดูลและตัวจัดการ (ELMAH) สำหรับ ASP.NET
- ประเภทไฟล์ - การประกอบ
- เส้นทาง - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- แก้ไขแล้ว - จริง
- เวอร์ชันรันไทม์ - v2.0.50727
- รุ่นที่ระบุ - เท็จ
- ชื่อที่แข็งแกร่ง - เท็จ
- รุ่น - 1.0.11211.0
ในMyWebProject1ฉันเพิ่มการอ้างอิงไปยังโครงการ MyBaseProject โดย: "เพิ่มการอ้างอิง ... " → "แท็บ" โครงการ "→เลือก" MyBaseProject " คุณสมบัติของการอ้างอิงนี้เหมือนกันยกเว้นสมาชิกต่อไปนี้:
- คำอธิบาย -
- เส้นทาง - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- เวอร์ชั่น - 1.0.0.0
ถ้าฉันเรียกใช้บิลด์ในVisual Studioไฟล์ elmah.dll จะถูกคัดลอกไปยังไดเรกทอรีbin ของ MyWebProject1พร้อมกับ MyBaseProject.dll!
อย่างไรก็ตามถ้าฉันทำความสะอาดและเรียกใช้MSBuildสำหรับการแก้ปัญหา (ผ่าน D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: การกำหนดค่า = Debug MyProject.sln ) elmah.dll จะหายไปในไดเรกทอรี bin ของ MyWebProject1 - แม้ว่า build จะไม่มีคำเตือนหรือข้อผิดพลาด!
ฉันได้ทำให้แน่ใจว่า. csproj ของ MyBaseProject มีองค์ประกอบส่วนตัวที่มีค่า "จริง" (ที่ควรจะเป็นนามแฝงสำหรับ " คัดลอกท้องถิ่น " ใน Visual Studio):
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(แท็กส่วนตัวไม่ปรากฏใน xml ของ. csproj โดยค่าเริ่มต้นถึงแม้ว่า Visual Studio จะพูดว่า "copy local" จริงฉันเปลี่ยน "copy local" เป็น false - บันทึก - และตั้งค่ากลับเป็นจริงอีกครั้ง - บันทึก!)
เกิดอะไรขึ้นกับ MSBuild ฉันจะรับการอ้างอิง (elmah.dll) ที่คัดลอกไปยังถังขยะของ MyWebProject1 ได้อย่างไร
ฉันไม่ต้องการเพิ่มการดำเนินการคัดลอก postbuild ให้กับคำสั่ง postbuild ของทุกโครงการ! (ลองนึกภาพฉันจะมีหลายโครงการขึ้นอยู่กับ MyBaseProject!)