DLL ที่อ้างถึงไม่ได้รับการคัดลอกไปยังโฟลเดอร์สร้างผลลัพธ์ใน Visual Studio


188

ฉันมีทางออกสตูดิโอภาพ ฉันมีหลายโครงการในการแก้ปัญหา มีโครงการหลักหนึ่งโครงการซึ่งทำหน้าที่เป็นการเริ่มต้นและใช้โครงการอื่น มีหนึ่งโครงการพูดว่า "ProjectX" มีการเพิ่มการอ้างอิงไปยังโครงการหลัก ProjectX อ้างอิง. NET dll อื่น (พูด abc.dll) ที่ไม่ได้เป็นส่วนหนึ่งของการแก้ปัญหา

ตอนนี้ abc.dll นี้ควรถูกคัดลอกไปยังโฟลเดอร์ bin / debug ของโครงการหลัก แต่ไม่ได้รับการคัดลอกที่นั่น ทำไมไม่คัดลอกเหตุผลใด ๆ


หากคุณไม่สามารถเข้าใจได้ให้คัดลอกมันไว้ในส่วนนำหน้าของคุณ
Dilshod

คุณใช้ 'ProjectX' ของคุณในโครงการหลักอย่างไร - ประเภทของโครงการเป้าหมาย ฯลฯ
NSGaga ที่ไม่ใช้งานเป็นส่วนใหญ่

ฉันมีปัญหาเดียวกันและคำตอบนี้แก้ไขปัญหาของฉันได้ที่: stackoverflow.com/a/8213977/174469
Gordon Tucker


มีวิธีการแก้ปัญหาที่มีอยู่RestoreProjectStyle แนวคิดคือการตั้งค่า<RestoreProjectStyle>PackageReference</RestoreProjectStyle>สำหรับแต่ละโครงการ. Net Framework ในการแก้ปัญหา
oleksa

คำตอบ:


105

ฉันพบว่าหาก ProjectX อ้างอิง abc.dll แต่ไม่ได้ใช้ประเภทใด ๆ ที่กำหนดใน abc.dll โดยตรงจากนั้น abc.dll จะไม่ถูกคัดลอกไปยังโฟลเดอร์เอาต์พุตหลัก (มันจะถูกคัดลอกไปยังโฟลเดอร์เอาต์พุต ProjectX เพื่อสร้างความสับสนเป็นพิเศษ)

ดังนั้นหากคุณไม่ได้ใช้งานประเภทใด ๆ จาก abc.dll อย่างชัดเจนใน ProjectX ให้ใส่การประกาศแบบจำลองที่ไหนสักแห่งในไฟล์ใดไฟล์หนึ่งใน ProjectX

AbcDll.AnyClass dummy006; // this will be enough to cause the DLL to be copied

คุณไม่จำเป็นต้องทำเช่นนี้สำหรับทุกคลาส - เพียงแค่ครั้งเดียวก็เพียงพอที่จะทำสำเนา DLL และทุกอย่างทำงานตามที่คาดไว้

ภาคผนวก:โปรดทราบว่านี่อาจใช้งานได้กับโหมดแก้ไขข้อบกพร่อง แต่ไม่ใช่สำหรับการเปิดตัว ดูคำตอบของ @ nvirth สำหรับรายละเอียด


7
ดูเหมือนว่าแฮ็ค การเพิ่มการอ้างอิงไปยังโครงการหลักน่าจะเพียงพอ
Mike K

3
มันเป็นแฮ็ค แต่ตามที่ CodeProject ของวันนี้สอนเราแม้แต่คอมไพเลอร์ก็ผิด!
Overlord Zurg

4
สิ่งที่บ้าสามารถ @OverlordZurg วิธีการแก้ปัญหาของคุณทำงานตามที่ฉันมีการอ้างอิงถึง dll ที่ขึ้นอยู่ใน XAML ของฉัน (WPF) และมันไม่ได้คัดลอก DLL ไปยังโครงการหลักจนกว่าฉันจะเพิ่มการอ้างอิงตัวอย่างที่เรียบง่ายตามที่คุณบอก ... ขอบคุณต่อไป
Mohsen Afshin

5
@MohsenAfshin ฉันมีปัญหาเดียวกัน --- ฉันอ้างอิง DLL ที่ต้องพึ่งพาใน XAML แทนที่จะประกาศตัวแปรดัมมี่ฉันเพียงแค่ตั้งชื่อคอมโพเนนต์ที่ฉันใช้ใน XAML และนั่นก็เพียงพอที่จะทำให้การคัดลอกแอสเซมบลีของมัน
redcurry

5
@MikeK การเพิ่มลงในโครงการหลัก (ซึ่งไม่ได้ขึ้นอยู่กับมันโดยตรง) เป็นแฮ็คที่ยิ่งใหญ่กว่า IMO จากนั้นคุณต้องจัดการมันสองที่ ("จัดการ" ในการอัพเกรดหรือลบ) ด้วยแฮ็คนี้อย่างน้อยคุณจะได้รับข้อผิดพลาดในการรวบรวมเวลาที่เตือนให้คุณลบแฮ็คนี้เมื่อคุณลบการอ้างอิงและคุณยังต้องอัปเดตในที่เดียวเท่านั้น
jpmc26

71

เป็นเพียงคำตอบที่เกินคำตอบของ Overlord Zurg

ฉันได้เพิ่มการอ้างอิงดัมมี่ด้วยวิธีนี้และมันทำงานในโหมดดีบั๊ก:

public class DummyClass
{
    private static void Dummy()
    {
        var dummy = typeof(AbcDll.AnyClass);
    }
}

แต่ในโหมด Release, dll ที่พึ่งพายังคงไม่ได้ถูกคัดลอก
สิ่งนี้ใช้ได้ผล:

public class DummyClass
{
    private static void Dummy()
    {
        Action<Type> noop = _ => {};
        var dummy = typeof(AbcDll.AnyClass);
        noop(dummy);
    }
}

ข้อมูลนี้มีค่าใช้จ่ายฉันชั่วโมงคิดออกดังนั้นฉันคิดว่าฉันแบ่งปัน


7
ในโหมดวางจำหน่ายเครื่องมือเพิ่มประสิทธิภาพจะสมมติว่าไม่มีการใช้ "จำลอง" ดังนั้นจึงไม่จำเป็นต้องใช้บรรทัดนี้และควรลบออก แต่เมื่อคุณใช้ "จำลอง" ในรหัสเครื่องมือเพิ่มประสิทธิภาพจะไม่ถือว่าไม่จำเป็น
Yucel

1
สิ่งนี้ใช้ไม่ได้กับฉัน AbcDll.AnyClass ยังไม่ถูกคัดลอกไปยังโครงการอื่น
Matthew Lock

3
ตรวจสอบให้แน่ใจว่าAbcDll.AnyClassใช้เป็นเขตข้อมูลสาธารณะหรือคุณสมบัติบนคลาสสาธารณะจากนั้นจะใช้งานได้ ถ้าคุณใช้มันในร่างกายวิธีการเช่นนี้คอมไพเลอร์ไม่ได้เห็นมัน มันจะล่าช้าในการโหลดการชุมนุมนี้ไม่ใช่สิ่งที่คุณต้องการที่จะเกิดขึ้น
John Leidegren

52

ใช่คุณจะต้องตั้งไปCopy Local trueแต่ผมค่อนข้างมั่นใจว่าคุณยังจะต้องอ้างอิงที่ประกอบจากโครงการหลักและชุดCopy Localที่จะtrueเป็นอย่างดี - มันไม่เพียง แต่ได้รับการคัดลอกมาจากการชุมนุมขึ้น

คุณสามารถไปยังCopy Localสถานที่ให้บริการได้โดยคลิกที่แอสเซมบลีด้านล่างReferencesและกด F4


2
@Brij เป็นแอสเซมบลีที่อ้างอิงจากโครงการหลักที่คุณต้องการหรือไม่ ดังที่ฉันได้กล่าวมาฉันค่อนข้างแน่ใจว่าคุณต้องอ้างอิงจากโครงการดังกล่าวรวมถึงแอสเซมบลีที่ขึ้นอยู่กับจะไม่คัดลอกเช่นนั้น หากเป็นกรณีนี้คุณไม่จำเป็นต้องเพิ่มชุดประกอบเข้ากับโครงการที่เกี่ยวข้องทั้งหมดเมื่อใช้ NuGet
Mike Perrenoud

1
อะไรคือข้อสรุปที่นี่? ดูเหมือนว่าสำหรับคุณแล้วการอ้างอิงที่ถูกต้องนั้นจะไม่ถูกคัดลอกแม้ว่า CopyLocal จะถูกตั้งค่าเป็นจริง - ตรรกะอะไรที่อยู่เบื้องหลัง
mcmillab

29
@mcmillab ในระยะสั้น Visual Studio ไม่ได้อนุมานการพึ่งพาจากโครงการที่ขึ้นต่อกันอื่น ๆ หากโครงการ A อ้างอิงถึงโครงการ B โครงการ A จะต้องมีการอ้างอิงโครงการ B ทั้งหมด มันทำงานได้ดีเมื่อทุกความต้องการของโครงการ B คือแอสเซมบลี. NET แต่ถ้าเป็นแอสเซมบลีของบุคคลที่สามคุณต้องเพิ่มการอ้างอิงไปยังโครงการทั้งสอง
Mike Perrenoud

12
@MichaelPerrenoud ฉันไม่คิดว่าเป็นเรื่องจริง หากคุณดูรายละเอียดผลลัพธ์ MSBuild คุณจะเห็นการเรียกไปยังResolveAssemblyReferenceซึ่งระบุว่า "รวมการอ้างอิงที่สองและลำดับที่ n" นอกจากนี้ยังสอดคล้องกับสิ่งที่ฉันเห็นในโฟลเดอร์ bin ของฉัน (การอ้างอิงที่ n ได้รับการคัดลอก) ปัญหาคือมีข้อแม้บางประการเกี่ยวกับสิ่งที่คัดลอกส่วนใหญ่รอบ GAC และการอ้างอิงทางอ้อม (บางครั้งเพิ่มการอ้างอิงไม่เพียงพอ)
Jack Ukleja

2
ประสบการณ์ปัจจุบันของฉันคือการทำงานนี้จะยกเว้นการอ้างอิงที่ 'คัดลอก': โครงการ A.net อ้างอิง C ++ DLLs ภายนอกเป็นไฟล์ที่ 'คัดลอกเสมอ' โครงการ B.net อ้างอิงโครงการ A เมื่อสร้าง B / Debug จะรวม C ++ dll อย่างไรก็ตามเมื่อฉันสร้าง Application X ซึ่งอ้างอิง Project B บางครั้ง C ++ dll จะถูกคัดลอก (ดูเหมือนว่าจะเป็นเฉพาะเมื่อฉันสร้างใหม่)
Benjol

34

มันดูเนียนเมื่อคุณทำให้มันเป็นคุณสมบัติการชุมนุม

[AttributeUsage(AttributeTargets.Assembly)]
public class ForceAssemblyReference: Attribute
{        
    public ForceAssemblyReference(Type forcedType)
    {
        //not sure if these two lines are required since 
        //the type is passed to constructor as parameter, 
        //thus effectively being used
        Action<Type> noop = _ => { };
        noop(forcedType);
    }
}

การใช้งานจะเป็น:

[assembly: ForceAssemblyReference(typeof(AbcDll.AnyClass))]

ขอบคุณ แต่สำหรับฉันสิ่งนี้จะทำอะไรก็ต่อเมื่อฉันเพิ่มแอตทริบิวต์แอสเซมบลีให้กับการพึ่งพา (Project X) ซึ่งอ้างอิง AbcDll.AnyClass แล้ว และจากนั้นจะไม่ทำอะไรมากกว่าปกติที่จะคัดลอก AbcDll ไปยังไดเรกทอรีผลลัพธ์ของการพึ่งพา มันยังไม่ได้คัดลอกไปยังผลลัพธ์ของโครงการขึ้นอยู่กับหลัก และฉันไม่สามารถเพิ่มคุณสมบัติให้กับแอสเซมบลีที่ขึ้นต่อกันเว้นแต่ว่าฉันจะเพิ่มการอ้างอิงถึง AbcDll เมื่อฉันทำเช่นนั้น AbcDll จะถูกคัดลอกไปแล้วโดยไม่มีแอตทริบิวต์
JS

25

วิ่งเข้าไปในปัญหาเดียวกันนี้ ข้อมูลความเป็นมา: ก่อนการสร้างฉันได้เพิ่ม Project X ใหม่ลงในโซลูชัน Project Y ขึ้นอยู่กับ Project X และ Project A, B, C ขึ้นอยู่กับ Project Y

ข้อผิดพลาดในการสร้างคือไม่พบโปรเจ็กต์ A, B, C, Y และ X

สาเหตุหลักมาจากที่ Project X สร้างขึ้นใหม่ตั้งเป้าไว้ที่. NET 4.5 ในขณะที่ส่วนที่เหลือของโปรเจ็กต์ที่กำหนดเป้าหมายไว้. NET 4.5.1 Project X ไม่ได้สร้างทำให้ส่วนที่เหลือของโครงการไม่ได้สร้างเช่นกัน

ตรวจสอบให้แน่ใจว่าโครงการที่เพิ่มเข้ามาใหม่นั้นมีเป้าหมายตรงกับ. NET เวอร์ชั่นเดียวกับโซลูชั่นที่เหลือ


1
โครงการอ้างอิงอาจเป็น. NET รุ่นเก่ากว่า ฉันสามารถอ้างอิงโครงการที่สร้างขึ้นสำหรับ. NET 4 โดยโครงการที่สร้างขึ้นสำหรับ. NET 4.5
redcurry

18

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

ฉันทำสิ่งนี้ใน Visual Studio โดย "การเพิ่มไฟล์ที่มีอยู่" คุณควรจะเพิ่มได้ทุกที่ยกเว้นโฟลเดอร์ Add_data โดยส่วนตัวฉันเพิ่งเพิ่มไปยังราก

จากนั้นเปลี่ยนคุณสมบัติของไฟล์นั้นเป็น ...

Build Action = None (ให้ชุดนี้เป็นเนื้อหาที่เหมือนจริง ๆ แล้วคัดลอกเวอร์ชัน "root" ไปยังรูทรวมถึงสำเนาใน Bin)

คัดลอกไปยังโฟลเดอร์เอาต์พุต = คัดลอกหากใหม่กว่า (โดยทั่วไปจะใส่ไว้ในโฟลเดอร์ BIN เฉพาะเมื่อไม่มีหาย แต่ไม่ได้ทำหลังจากนั้น)

เมื่อฉันเผยแพร่ .. DLL ที่เพิ่มของฉันมีอยู่ในโฟลเดอร์ BIN เท่านั้นและไม่มีที่อื่นในตำแหน่งเผยแพร่ (ซึ่งเป็นสิ่งที่ฉันต้องการ)


10

คุณสามารถตรวจสอบเพื่อให้แน่ใจว่า DLLs ที่คุณต้องการไม่รวมอยู่ใน GAC ฉันเชื่อว่า Visual Studio กำลังฉลาดที่จะไม่คัดลอกไฟล์เหล่านั้นหากมีอยู่ใน GAC บนเครื่องสร้าง

ฉันเพิ่งวิ่งในสถานการณ์นี้ที่ฉันได้รับการทดสอบแพคเกจ SSIS ที่ต้องมีการชุมนุมอยู่ใน GAC ฉันลืมไปตั้งแต่นั้นและสงสัยว่าทำไม DLLs เหล่านั้นถึงไม่ออกมาในระหว่างการสร้าง

วิธีตรวจสอบสิ่งที่อยู่ใน GAC (จากพรอมต์คำสั่งสำหรับนักพัฒนา Visual Studio):

gacutil -l

หรือส่งออกไปยังไฟล์เพื่อให้อ่านง่ายขึ้น:

gacutil -l > output.txt
notepad.exe output.txt

ในการลบชุดประกอบ:

gacutil -u MyProjectAssemblyName

ฉันควรทราบด้วยว่าเมื่อฉันลบไฟล์ออกจาก GAC พวกเขาจะถูกส่งออกอย่างถูกต้องในไดเรกทอรี \ bin หลังจากการสร้าง (แม้สำหรับการประกอบที่ไม่ได้อ้างอิงโดยตรงในโครงการรูท) นี่คือใน Visual Studio 2013 Update 5


ขอบคุณคุณพูดถูก MSBuild จะไม่คัดลอก dll ไปยังโฟลเดอร์ output หากพบใน GAC
John-Philip

3

ในกรณีของฉันมันเป็นสิ่งที่งี่เง่าที่เกิดจากพฤติกรรมเริ่มต้นของ TFS / VS ที่ฉันไม่เห็นด้วย

เนื่องจากการเพิ่ม dll เป็นการอ้างอิงถึงโครงการหลักไม่ได้ผลฉันจึงตัดสินใจเพิ่มเป็น "รายการที่มีอยู่" ด้วยการคัดลอกโลคัล = เสมอ แม้กระทั่งไฟล์ก็ไม่ได้อยู่ที่นั่น

ปรากฎว่าแม้ว่าไฟล์นั้นจะมีอยู่ใน VS Solution และทุกอย่างที่รวบรวมทั้งภายในและบนเซิร์ฟเวอร์ VS / TFS ไม่ได้เพิ่มจริง ๆ แล้วเพิ่มไฟล์ลงในแหล่งควบคุม มันไม่ได้รวมอยู่ใน "การเปลี่ยนแปลงที่รอดำเนินการ" เลย ฉันต้องไปที่ Explorer การควบคุมแหล่งที่มาด้วยตนเองและคลิกที่ไอคอน "เพิ่มรายการไปยังโฟลเดอร์" อย่างชัดเจน

โง่เพราะฉันพัฒนามา 15 ปีแล้วใน VS ฉันเคยพบเจอมาก่อนหน้านี้ฉันจำไม่ได้และฉันพลาดเพราะทุกอย่างยังคงรวบรวมเพราะไฟล์เป็นข้อมูลอ้างอิงปกติ แต่ไฟล์ที่เพิ่มเป็นรายการที่มีอยู่ไม่ได้ถูกคัดลอกเพราะไม่มีอยู่ เซิร์ฟเวอร์ตัวควบคุมแหล่งที่มา

ฉันหวังว่าสิ่งนี้จะช่วยชีวิตใครบางคนได้บ้างเนื่องจากฉันเสียชีวิตไป 2 วัน


1
ฉันไม่สามารถขอบคุณได้มากพอ ... คุณช่วยฉันประหยัดเวลาได้มาก นี่คือทางออกสำหรับฉัน นอกจากนี้ยังพบปัญหาราก DLL ที่ฉันเพิ่มเป็นการอ้างอิงที่ตรงกับgitignoreรูปแบบดังนั้นเมื่อเพิ่มเป็นการอ้างอิงมันไม่ได้เพิ่มในโครงการ คุณต้องเพิ่มไฟล์ลงในแหล่งควบคุมด้วยตนเอง !!!
Mattkwish

2

นี่คือตัวอย่างเล็กน้อยของ nvirth

internal class DummyClass
{
    private static void Dummy()
    {
        Noop(typeof(AbcDll.AnyClass));
    }
    private static void Noop(Type _) { }
}

2

ฉันจะเพิ่มลงในเหตุการณ์ Postbuild เพื่อคัดลอกไลบรารีที่จำเป็นไปยังไดเรกทอรีผลลัพธ์ บางอย่างเช่น XCopy pathtol ไลบรารี targetdirectory

คุณสามารถค้นหาได้ในคุณสมบัติโครงการ -> สร้างกิจกรรม


สิ่งนี้ใช้ได้สำหรับฉันและฉันคิดว่านี่เป็นคำตอบที่ดีกว่า วิธีแก้ปัญหาอ้างอิงแบบหลอกใช้งานได้ แต่เป็นแฮ็คในขณะที่กฎหลังการสร้างเป็นวิธีที่สะอาดเพื่อให้ได้ผลลัพธ์เดียวกัน
Kevin Fichter

2

ปัญหา:

พบกับปัญหาที่คล้ายกันสำหรับแพ็คเกจ NuGet DLL (Newtonsoft.json.dll) ซึ่งผลลัพธ์ของการสร้างไม่รวม DLL ที่อ้างอิง แต่การรวบรวมก็ทำได้ดี

การแก้ไข:

ผ่านโครงการของคุณในโปรแกรมแก้ไขข้อความและค้นหาการอ้างอิงด้วยแท็กในพวกเขา เหมือนจริงหรือเท็จ “ ส่วนตัว” เป็นคำพ้องสำหรับ“ คัดลอก Local” ที่ไหนสักแห่งในการดำเนินการ MSBuild กำลังทำการค้นหาการอ้างอิงมันค้นหาการอ้างอิงของคุณที่อื่นและตัดสินใจที่จะไม่คัดลอก

ดังนั้นให้ไปที่แต่ละไฟล์. csproj / .vbproj และลบแท็กด้วยตนเอง สร้างใหม่และทุกอย่างทำงานได้ทั้งใน Visual Studio และ MSBuild เมื่อคุณทำงานได้แล้วคุณสามารถกลับไปที่และอัปเดตสิ่งที่คุณต้องการได้

อ้างอิง:

https://www.paraesthesia.com/archive/2008/02/13/what-to-do-if-copy-local-works-in-vs-but.aspx/


1

ไม่จำเป็นต้องมี DUMMY ในรหัส
เพียง:

เพิ่มการอ้างอิงไปยังโครงการ Executeable

หรือ / และตรวจสอบให้แน่ใจว่าการอ้างอิงในโครงการที่ดำเนินการได้"Copy Local"ตั้งค่าเป็นTRUE(ซึ่งเป็น " ความผิดพลาด " ของฉัน) ดูเหมือนว่า"แทนที่"การตั้งค่าในฐานอ้างอิงโครงการห้องสมุด ...


1

ถ้าคุณคลิกขวาที่แอสเซมบลีที่อ้างอิงคุณจะเห็นคุณสมบัติที่เรียกว่าคัดลอกภายในเครื่อง หากการคัดลอกโลคัลถูกตั้งค่าเป็นจริงดังนั้นชุดประกอบควรรวมอยู่ในถังขยะ อย่างไรก็ตามมีตะเข็บที่จะมีปัญหากับ Visual Studio ซึ่งบางครั้งก็ไม่รวม dll ที่อ้างอิงในโฟลเดอร์ bin ... นี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉัน:

ป้อนคำอธิบายรูปภาพที่นี่


1
Copy Loal ถูกปิดใช้งานสิ่งนี้ช่วยstackoverflow.com/questions/15526491/…
codemirror

1

TLDR; Visual Studio 2019 อาจต้องรีสตาร์ท

ฉันพบสถานการณ์นี้โดยใช้โครงการที่ยึดตามโครงการ Microsoft.NET.Sdk

<Project Sdk="Microsoft.NET.Sdk">

โดยเฉพาะ:

  • Project1: เป้าหมาย .netstandard2.1
    • การอ้างอิงMicrosoft.Extensions.Logging.Consoleผ่าน Nuget
  • Project2: เป้าหมาย .netstandard2.1
    • การอ้างอิงProject1ผ่านการอ้างอิงโครงการ
  • Project2Tests: เป้าหมาย .netcoreapp3.1
    • การอ้างอิงProject2ผ่านการอ้างอิงโครงการ

ในการดำเนินการทดสอบฉันได้รับข้อความแสดงข้อผิดพลาดที่ระบุว่าMicrosoft.Extensions.Logging.Consoleไม่พบและมันไม่ได้อยู่ในไดเรกทอรีผลลัพธ์

ฉันตัดสินใจที่จะทำงานแก้ไขปัญหาโดยการเพิ่มMicrosoft.Extensions.Logging.ConsoleการProject2เพียงเพื่อจะพบว่าภาพสตูดิโอ Nuget ผู้จัดการไม่ได้รายการMicrosoft.Extensions.Logging.Consoleเป็นที่ติดตั้งในProject1แม้จะมีการปรากฏตัวของมันในProject1.csprojไฟล์

การปิดและการรีสตาร์ท Visual Studio อย่างง่ายช่วยแก้ปัญหาโดยไม่จำเป็นต้องเพิ่มการอ้างอิงพิเศษ บางทีนี่อาจช่วยคนที่สูญเสียผลิตภาพ 45 นาที :-)


อันที่จริงฉันรีสตาร์ทพีซีทั้งหมดเพื่อทดสอบสิ่งต่าง ๆ แต่มันใช้ได้กับฉัน
Noman_1

0

คุณสามารถตั้งค่าทั้งโครงการหลักและเส้นทางการส่งออกของ ProjectX ไปที่โฟลเดอร์เดียวกันจากนั้นคุณจะได้รับไฟล์ทั้งหมดที่คุณต้องการในโฟลเดอร์นั้น


0

ตรวจสอบให้แน่ใจว่า dll ที่อ้างถึงที่ใช้โดยคุณไม่มีเป้าหมาย. net framework สูงกว่าเป้าหมาย. net framework ของ Application ของโครงการของคุณ

คุณสามารถตรวจสอบสิ่งนี้ได้โดยเลือกโครงการของคุณแล้วกด ALT + ENTER จากนั้นเลือกแอปพลิเคชันจากด้านซ้ายแล้วเลือกกรอบงานเป้าหมายของโครงการของคุณ

สมมติว่า dll ที่ขึ้นกับ Target Framework = 4.0 และ Application dll Target Framework = 3.5 จากนั้นเปลี่ยนเป็น 4.0

ขอบคุณ!


0

นอกเหนือจากรายการทั่วไปข้างต้นฉันมีวิธีแก้ปัญหาหลายโครงการเพื่อเผยแพร่ เห็นได้ชัดว่าบางไฟล์กำหนดเป้าหมายเฟรมเวิร์กต่างกัน

ดังนั้นโซลูชันของฉัน: คุณสมบัติ> รุ่นเฉพาะ (เท็จ)


0

เพิ่ม DLL เป็นรายการที่มีอยู่ให้กับโครงการใดโครงการหนึ่งและควรจะเรียงลำดับ


0

VS2019 V16.6.3

สำหรับฉันแล้วปัญหาคือไฟล์. proj หลัก ๆ จบลงด้วยรายการเช่นนี้สำหรับโครงการที่ DLL ไม่ได้ถูกคัดลอกไปยังโฟลเดอร์ bin โครงการหลัก:

<ProjectReference Include="Project B.csproj">
  <Project>{blah blah}</Project>
  <Name>Project B</Name>
  <Private>True</Private>
</ProjectReference>

ฉันลบบรรทัดเองแล้ว<Private>True</Private>DLL ก็ถูกคัดลอกไปยังโฟลเดอร์ bin โครงการหลักในทุกบิลด์ของโครงการหลัก

หากคุณไปที่การอ้างอิงของโครงการปัญหาในโฟลเดอร์อ้างอิงของโครงการหลักให้คลิกและดูคุณสมบัติที่มีการตั้งค่า "Copy Local" แท็กส่วนตัวเท่ากับการตั้งค่านี้ แต่สำหรับฉันด้วยเหตุผลบางประการการเปลี่ยนคัดลอกโลคัลไม่มีผลต่อแท็กส่วนตัวในไฟล์. proj

น่ารำคาญฉันไม่ได้เปลี่ยนค่าโลคัลสำเนาสำหรับการอ้างอิงไม่มีความคิดว่ามันถูกกำหนดไว้อย่างไรและอีกวันหนึ่งก็ติดตามปัญหาโง่ ๆ ที่เกิดขึ้นกับ VS

ขอบคุณทุกคำตอบอื่น ๆ ที่ช่วยให้ฉันอยู่ในสาเหตุ

HTH

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