রেফারেন্সড এসেম্বলি পিডিবি এবং এক্সএমএল ফাইলগুলি আউটপুটে অনুলিপি করা প্রতিরোধ করা


118

আমার কাছে একটি ভিজ্যুয়াল স্টুডিও ২০০ C সি # / নেট নেট 3.5.৩ প্রকল্প রয়েছে যা সামগ্রীতে জিপ করার জন্য একটি পোস্ট বিল্ড টাস্ক রয়েছে। তবে আমি খুঁজেছি যে আমি আমার আউটপুট ডিরেক্টরিতে (এবং জিপ) রেফারেন্সড এসেম্বলির '.pdb (ডিবাগ) এবং .xML (ডকুমেন্টেশন) ফাইলগুলিও পাচ্ছি।

উদাহরণস্বরূপ, যদি মাইপ্রজেক্ট.সিএসপ্রোজ আপনার অ্যাস্প্যাস.ডিলের উল্লেখ করে এবং সেখানে ডিএলএল হিসাবে একই ডিরেক্টরিতে আপনারআসাম্পশন.এক্সএমএল এবং তোরআস্যাবলেট.পিডিবি ফাইল থাকে তবে তারা আমার আউটপুট ডিরেক্টরিতে (এবং জিপ) প্রদর্শিত হবে।

জিপ করার সময় আমি * .pdb বাদ দিতে পারি তবে একই এক্সটেনশান সহ আমার কাছে ডিপ্লোয়মেন্ট ফাইল থাকায় আমি * .xML ফাইলগুলি বাদ দিতে পারি না।

উল্লেখযোগ্য সমাবেশ পিডিবি এবং এক্সএমএল ফাইলগুলি অনুলিপি করা থেকে এই প্রকল্পকে প্রতিরোধ করার কী উপায় আছে?

উত্তর:


68

আপনি কমান্ড লাইনের মাধ্যমেও এটি নির্দিষ্ট করতে পারেন:

MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none

9
এটি যাওয়ার পথের মতো দেখায় কারণ আপনি এটি কেবল আপনার বিল্ড সংজ্ঞা এমএসবিল্ড যুক্তিতে অন্তর্ভুক্ত করতে পারেন এবং সিএসপিজেজ ফাইলগুলিতে হ্যাক করতে হবে না।
মাফিন ম্যান

2
এটি টিএফএস থেকে দুর্দান্ত কাজ করে এবং আমার ক্ষেত্রে 100 টি প্রকল্প পরিবর্তন করতে বাঁচায়
স্টি-ফু

টিএফএস2018 এবং নন-এক্সএএমএল স্টাইল বিল্ডগুলির সাথে দুর্দান্ত কাজ করে।
11:38

ঝরঝরে এবং দ্রুত সমাধান ধন্যবাদ
করণ

158

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

আমি Microsoft.Common.targetsএমন কিছু খুঁজছিলাম যা কাজ করতে পারে এবং AllowedReferenceRelatedFileExtensionsসম্পত্তিটি খুঁজে পেতে পারে। এটি ডিফল্ট .pdb; .xmlতাই আমি আমার প্রকল্পের ফাইলে স্পষ্টভাবে এটি সংজ্ঞায়িত করেছি। ক্যাচটি হ'ল আপনার কিছু প্রয়োজন (সাদা জায়গা যথেষ্ট নয়) অন্যথায় এটি ডিফল্ট ব্যবহার করবে।

<Project ...>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <AllowedReferenceRelatedFileExtensions>
      <!-- Prevent default XML and PDB files copied to output in RELEASE. 
           Only *.allowedextension files will be included, which doesn't exist in my case.
       -->
      .allowedextension
    </AllowedReferenceRelatedFileExtensions> 
  </PropertyGroup>

3
এটি "সঠিক" উপায় হতে পারে তবে এটি এতটা লুকানো আছে যা আমার বইগুলিতে খারাপ।
ম্লাদেন মিহাজলভিক

1
ভিজ্যুয়াল স্টুডিও আইডিই থেকে তৈরি করার সময় এটি কাজ করেছিল। তবে এমএসবিল্ডের মাধ্যমে নির্মাণের সময় এটি আমার পক্ষে কার্যকর হয়নি। প্রকল্পের ফাইলে থাকলে এটি আমার / প বিকল্প হিসাবে নির্দিষ্ট করার দরকার নেই।
redcurry

19

আপনি এর মতো একটি পোস্ট বিল্ড ইভেন্ট কমান্ড যুক্ত করতে পারেন del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"


ধন্যবাদ। আপনার যদি রেফারেন্সড অ্যাসেমব্লির স্থির তালিকা থাকে তবে এটি কাজ করে। আমাদের ক্ষেত্রে তবে আমাদের দুটি ডজনেরও বেশি ছিল, আমরা রিফ্যাক্টর করার সময় তাদের মধ্যে অনেকগুলি প্রবাহিত ছিল।
জেসন মোর্স

4
ব্যক্তিগতভাবে আমি এটি সঠিক উত্তর বলে মনে করি - অন্যভাবে আপনি প্রকল্পের ফাইল হ্যাক করছেন এবং অন্য কেউ (বা নিজেকে বছর বছর পরে) জানেন না যে এটি রোধ করার জন্য কোথায় সন্ধান করবেন।
ম্লাদেন মিহাজলভিক

1
আমি পাশাপাশি এইভাবে পছন্দ। আমি যা কিছু ঘটতে হবে (বা প্রথম স্থানে তৈরির জন্য ডিজাইন করা হয়েছিল) শেষ করতে দিতে এবং তারপরে পোস্ট বিল্ড ইভেন্টগুলিকে শেষের মতো দেখতে চাইলে এটি তৈরি করতে দিন like এটা ঠিক এইভাবে অনেক ক্লিনার মনে হচ্ছে!
আরভো বোভেন

এমনকি এই সমাধানটি কাজ করে, আপনি মুছে ফেলবেন এমন কোনও কিছু অনুলিপি করার সময় থেকে এটি সত্যিই অনুকূলিত হয়নি optim আমি সর্বদা হ্যাক হিসাবে প্রাক / পোস্ট বিল্ড পদক্ষেপগুলি বিবেচনা করেছি কারণ তারা লক্ষ্য বা প্রজ ফাইলগুলির চেয়ে কোনও বিল্ড সিস্টেমে তেমন কাজ করে না।
খ্রিস্ট।

বাহ ক্রিস্ট.স, * ছাগল * আমি আশা করব যে দশ বছরে আমি এই প্রশ্নের উত্তর দেওয়ার পরে ভিজ্যুয়াল স্টুডিও দলটি আরও সহজ করে তুলেছে। :-)
অ্যান্ড্রু জ্যাকসনজেডে

5

এটি একটি পুরানো প্রশ্ন, তবে যেহেতু ইউআইয়ের মাধ্যমে পিডিবি এবং এক্সএমএল ফাইলগুলি উত্পাদন বন্ধ করতে হবে সে সম্পর্কে কোনও উত্তর নেই, তবে আমি বুঝতে পেরেছিলাম যে এটি সম্পূর্ণতার জন্য এখানে হওয়া উচিত।

ভিজ্যুয়াল স্টুডিও 2013 তে: প্রকল্পের বৈশিষ্ট্যগুলিতে, সংকলন ট্যাবটির অধীনে, "এক্সএমএল ডকুমেন্টেশন ফাইল উত্পন্ন করুন "টি চেক করুন, তারপরে" অ্যাডভান্সড কমপাইল অপশনগুলি "ক্লিক করুন এবং" ডিবাগের তথ্য উত্পন্ন করুন "কে" কিছুই নয় "পরিবর্তন করুন এবং এটি কৌশলটি কার্যকর করবে।


15
এটি আপনার অন্তর্ভুক্ত থাকা কোনও নুগেট প্যাকেজ pdbএবং xmlফাইলগুলি প্রভাবিত করবে না ।
লঙ্কমার্ট

আমি আমার সিএসপোজ ফাইলটিতে অক্টোপ্যাক বৈশিষ্ট্যগুলি ব্যবহার করছি এবং এটি আমার পিডিবি এবং এক্সএমএল ফাইলগুলির জন্য কৌশলটি করেছে। আমিও বনাম 2015. বিল্ড ব্যবহার করছিলেন -> উন্নত আউটপুট অধীনে -> তথ্য ত্রুটিমুক্ত করুন কেউ আউটপুট অধীনে সেট
Devin Prejean

0

আমার উত্তরটি এখন তুচ্ছ হতে পারে তবে এক্সএলএমএল ফাইলগুলি মুছতে আমি যে বিট স্ক্রিপ্টটি ব্যবহার করি সেটির সাথে যদি কোনও সম্পর্কিত ডেল থাকে তবে আমি তা ভাগ করতে চাই। আপনি যদি কেবলমাত্র আউটপুট ফোল্ডারটি পরিষ্কার করতে চান এবং অন্যান্য এক্সএমএল ফাইলগুলি মুছতে চান না তবে এটি কার্যকর।

SETLOCAL EnableDelayedExpansion

SET targetDir=%1

ECHO Deleting unnecessary XML files for dlls

FOR %%F IN (%targetDir%*.xml) DO (

  SET xmlPath=%%~fF
  SET dllPath=!xmlPath:.xml=.dll!

  IF EXIST "!dllPath!" (
    ECHO Deleting "!xmlPath!"
    DEL "!xmlPath!"
  )
)

ব্যবহার:

Cleanup.bat c:\my-output-folder\

এখানে এবং সেখানে সমস্ত ধরণের অনুসন্ধানের সাথে এই সাধারণ কাজটি ("বিলম্বিত সম্প্রসারণ" স্টাফকে ধন্যবাদ) শেষ করতে আমার এক ঘন্টা সময় লেগেছে। আশা করি এটি আমার মতো অন্যান্য বিএটি নবীনদের সহায়তা করবে।


0

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

<Target Name="RemoveFilesAfterBuild">   
    <ItemGroup>
        <XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
        <PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
    </ItemGroup>
    <Delete Files="@(XMLFilesToDelete)" />
    <Delete Files="@(PDBFilesToDelete)" />
</Target>

বিভিন্ন ভাষার নির্দিষ্ট ফোল্ডার তৈরি হওয়ার ক্ষেত্রেও আমার সমস্যা হয়েছিল, আপনার যদি এই সমস্যাটি থাকে তবে আপনি অব্যবহৃত ভাষা নির্দিষ্ট ফোল্ডারগুলিও সরাতে পারেন। আমি কেবল বিল্ড টাইপ "রিলিজ" এর অধীনে এটি ট্রিগার করতে বেছে নিয়েছি:

<ItemGroup>
    <FluentValidationExcludedCultures Include="be;cs;cs-CZ;da;de;es;fa;fi;fr;ja;it;ko;mk;nl;pl;pt;ru;sv;tr;uk;zh-CN;zh-CHS;zh-CHT">
        <InProject>false</InProject>
    </FluentValidationExcludedCultures> 
</ItemGroup>

<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />

    <ItemGroup>
        <XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
        <PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
    </ItemGroup>
    <Delete Files="@(XMLFilesToDelete)" />
    <Delete Files="@(PDBFilesToDelete)" />
</Target>

-3

আপনি যদি কেবল এক্সএমএল ফাইলগুলি বাদ দিতে চান (কোনও ডিবাগ রিলিজ বলার জন্য) আপনি এই জাতীয় কিছু করতে পারেন:

<AllowedReferenceRelatedFileExtensions>
  <!-- Prevent default XML from debug release  -->
      *.xml
 </AllowedReferenceRelatedFileExtensions>

মূলত, তালিকাভুক্ত প্রতিটি এক্সটেনশন (আধা-কোলন দ্বারা সীমিত) বাদ দেওয়া হবে।


1
এই প্রশ্ন এবং এটির স্বীকৃত উত্তরটি 4 বছরের পুরানো এবং আপনার উত্তরটি গৃহীত উত্তরের প্রায় একটি অনুলিপি।
জ্যাক

1
যা আলাদা তা হ'ল এক্সএমএল ফাইলের বাক্য গঠন যা আমার যা প্রয়োজন। এই ট্যাগটির সঠিক সিনট্যাক্সের জন্য আমাকে কিছু গবেষণা করতে হয়েছিল। আমি আসল উত্তরটি সহায়ক হিসাবে পেয়েছি এবং এটিতে ভোট দিয়েছি, তবে অনুভূত যে আমি অন্য কাউকে কেবল একটি নির্দিষ্ট ফাইল টাইপ ফিল্টার করার প্রয়োজন হলে কিছুটা সময় বাঁচাতে পারি।
প্রোভিগা

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