একটি এমএসবিল্ড প্রকল্প ফাইলটিতে প্রজেক্টের রেফারেন্সে ব্যক্তিগত সেটিংস কী করে?


119

আমি অন্য দিন এটি একটি প্রকল্পের ফাইলে দেখেছি:

<ProjectReference Include="Foo\Bar\Baz.csproj">
    <Project>{A GUID HERE}</Project>
    <Name>Baz</Name>
    <Private>False</Private> <!-- ??? -->
    <ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>

এগুলির প্রতিটি নোড ProjectReferenceস্ব-বর্ণনামূলক বলে মনে হয় (রেফারেন্সযুক্ত প্রকল্প ফাইল, জিইউইডি, নাম সলিউশন এক্সপ্লোরারটিতে দেখানোর নাম, এবং বর্তমান প্রকল্পটি রেফারেন্সড প্রকল্পের সাথে লিঙ্ক করা উচিত কিনা) Privateএবং সাধারণ এমএসবিল্ড প্রকল্প আইটেম পৃষ্ঠাটি না করে টি এই মান নথি। (একটা ব্যাপার Privateসেটিং এর জন্য নথিভুক্ত Referenceবদলে ProjectReference- কিন্তু এটা আছে Never, Alwaysএবং PreserveNewestসেটিংস, সত্য এবং মিথ্যা নয়)

এই সেটিংটি কী করে?


2
এমএসবিল্ডের হিসাবে, প্রজেক্টের উল্লেখটি একটি আইটেম গ্রুপ (যেমন, তালিকা) এবং অন্তর্ভুক্ত আইটেমটির জন্য ব্যক্তিগত হ'ল আইটেম মেটাডেটা। আপনার প্রশ্নের উত্তর এতে অন্তর্ভুক্ত রয়েছে যা এর সাথে অন্তর্ভুক্ত রয়েছে। আরও সাধারণ পরিভাষায়, এটি কোন প্রকারের প্রকল্প? আপনার প্রশ্নটি csharp দিয়ে ট্যাগ করুন।
টম ব্লডজেট

আমার অর্থ "আমদানি" নয় "অন্তর্ভুক্ত"।
টম ব্লডজেট

@ লেলেক্সান্দার: আমার মনে হয় আপনার উত্তরটি যদি আপনি মুছে ফেলা না তবে এটি ভাল ছিল ...
বিলি ওনিল

2
@ টম: অবশ্যই, কঠোরভাবে বললে এটি সত্য। অন্যদিকে, ProjectReferenceআইটেমটি (কমপক্ষে) সি # এবং সি ++ এমএসবিল্ড সমর্থনকারী অবকাঠামো দ্বারা স্বীকৃত; দেখে মনে হচ্ছে এটি বেশিরভাগ Microsoft.Common.CurrentVersion.targetsফাইলের মধ্যেই পরিচালিত ।
বিলি ওনিল

উত্তর:


126

Privateট্যাগ ভিসুয়াল স্টুডিও তথ্যসূত্র ফোল্ডারে "কপি স্থানীয়" চেকবক্সটি ব্যবহারকারী-ওভাররাইড বজায় রাখে। এটি জিএসি থেকে রেফারেন্স ব্যবহৃত হয়েছে কিনা বা এটি রেফারেন্সড অ্যাসেম্বলিটি বিল্ড ডিরেক্টরিতে কপি করবে কিনা তা নিয়ন্ত্রণ করে।

যদিও আমি এই প্রভাবের জন্য কোনও এমএসডিএন ডকুমেন্টেশন খুঁজে পাই না (কোয়েলি অবাক), এটি আচরণ এবং এটি প্রয়োগ করা হয়েছেMicrosoft.Common.CurrentVersion.targets:1742 যেখানে মন্তব্য থেকে স্পষ্ট :

এটি এমএসডিএন> কমন এমএসবিল্ড প্রকল্প আইটেমগুলিতে নথিভুক্ত করা হয়েছে , এবং আচরণ থেকেMicrosoft.Common.CurrentVersion.targets:1742 এবং এটি প্রয়োগ করা হয় এমন মন্তব্য থেকে স্পষ্ট :

  <!--
    ============================================================

                                        ResolveAssemblyReferences

    Given the list of assemblies, find the closure of all assemblies that they depend on. These are
    what we need to copy to the output directory.

        [IN]
        @(Reference) - List of assembly references as fusion names.
        @(_ResolvedProjectReferencePaths) - List of project references produced by projects that this project depends on.

            The 'Private' attribute on the reference corresponds to the Copy Local flag in IDE.
            The 'Private' flag can have three possible values:
                - 'True' means the reference should be Copied Local
                - 'False' means the reference should not be Copied Local
                - [Missing] means this task will decide whether to treat this reference as CopyLocal or not.

        [OUT]
        @(ReferencePath) - Paths to resolved primary files.
        @(ReferenceDependencyPaths) - Paths to resolved dependency files.
        @(_ReferenceRelatedPaths) - Paths to .xmls and .pdbs.
        @(ReferenceSatellitePaths) - Paths to satellites.
        @(_ReferenceSerializationAssemblyPaths) - Paths to XML serialization assemblies created by sgen.
        @(_ReferenceScatterPaths) - Paths to scatter files.
        @(ReferenceCopyLocalPaths) - Paths to files that should be copied to the local directory.
    ============================================================
    -->

7
মিচ যেমন বলেছিল এটি কোনও উল্লেখের জন্য বৈশিষ্ট্যগুলিতে কপি স্থানীয় সেটিংটি নিয়ন্ত্রণ করে। অতিরিক্তভাবে, এটিতে কেবল সত্য এবং মিথ্যা মান থাকতে পারে। যদি এটি অনুপস্থিত থাকে তবে সত্যের ডিফল্ট মান ধরে নেওয়া হয়
জিপিআর

4
যদি <Private>অনুপস্থিত থাকে তবে এটি তার সমতুল্য নয় True। "এমএসবিল্ড কপিলোকল বাগ" অনুসন্ধান করুন। যেমন দেখতে stackoverflow.com/questions/1132243
xmedeko

7
@ এক্সমেডেকো, এটি সঠিক। আমি নিশ্চিত নই যে @ জিপিআর কোথায় পেয়েছে "যদি এটি অনুপস্থিত থাকে তবে সত্যের ডিফল্ট মানটি ধরে নেওয়া হয়" যেহেতু উত্তরে স্পষ্ট করে বলা হয় "[মিসিং] এর অর্থ এই কাজটি সিদ্ধান্ত নেবে যে এই রেফারেন্সটি কপিরলোকাল হিসাবে গণ্য হবে কিনা"। বেশিরভাগ যুক্তি রয়েছেmsbuild\Reference.cs:949
মিচ

এটি কি <Private>সেট করা Trueথাকলেও, এমএসবাইল্ড আউটপুটটিতে অ্যাপ্লিকেশনটি ব্যবহার না করে থাকলেও রেফারেন্সটি অন্তর্ভুক্ত করে না? স্থানীয়ভাবে আমি এখনকার এই আচরণটি করছি ...
নিনজা

@ নিনজা, এমএসবিল্ড উল্লেখযোগ্য সমাবেশটি সনাক্ত করতে না পারলে এটি প্রায়শই ঘটে। যদি এটি সরাসরি কোড ব্যবহার না করে তবে এটি সফলভাবে সংকলন করতে পারে। আপনি প্রোমমন বা এমএসবিল্ড বিস্তারিত লগিং
মিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.