ভিএস 2010 ওয়েব ডিপ্লোয়মেন্ট প্যাকেজ ব্যবহার করে আপনি কীভাবে অতিরিক্ত ফাইল অন্তর্ভুক্ত করবেন?


125

আমি ভিজ্যুয়াল স্টুডিও ২০১০-তে নতুন ওয়েব প্যাকেজিং কার্যকারিতাটি ব্যবহার করে পরীক্ষা করছি এবং এমন একটি পরিস্থিতি এসে পৌঁছেছি যেখানে আমি প্রয়োজনীয় বিল্ড কপি করার জন্য প্রাক-বিল্ড ইভেন্টটি ব্যবহার করি ll এগুলিকে রেফারেন্স হিসাবে অন্তর্ভুক্ত করা যাবে না যেহেতু তারা সিওএম ডলস নয় যা ইন্টারপ দিয়ে ব্যবহার করা যেতে পারে।

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

উত্তর:


176

দুর্দান্ত প্রশ্ন। আমি এই সম্পর্কে ওয়েব ডিপ্লোমেন্ট সরঞ্জামে (এমএসডিপপ্লয়) একটি খুব বিস্তারিত ব্লগ এন্ট্রি পোস্ট করেছি : অতিরিক্ত ফাইল বা নির্দিষ্ট ফাইলগুলি বাদ দিয়ে প্যাকেজ তৈরি করুন

এখানে সংক্ষিপ্তসার। ফাইলগুলি অন্তর্ভুক্ত করার পরে, আমি কীভাবে ফাইলগুলিও বাদ দিতে পারি তা দেখাই।

অতিরিক্ত ফাইল সহ

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

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>

  <CopyAllFilesToSingleFolderForMsdeployDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
  </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>

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

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

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

তারপরে আমি এই আইটেমটি ফাইলফোরপ্যাকেজিংফ্রমপ্রজেক্ট আইটেমটি পপুলেট করতে ব্যবহার করি। এটি MSDeploy আসলে অতিরিক্ত ফাইল যুক্ত করতে ব্যবহার করে item এছাড়াও লক্ষ্য করুন যে আমি মেটাটাটা ডেস্টিনেশন রিলেটিভপথ মান ঘোষণা করেছিলাম। এটি প্যাকেজটিতে যে আপেক্ষিক পথটি স্থাপন করবে তা নির্ধারণ করবে। আমি এখানে অতিরিক্ত ফাইল% (রিক্রুসিভডির)% (ফাইলের নাম)% (এক্সটেনশন) বিবৃতিটি ব্যবহার করেছি। এটি যা বলছে তা হ'ল এটি অতিরিক্ত ফাইল ফোল্ডারের অধীনে প্যাকেজে একই আপেক্ষিক স্থানে স্থাপন করা।

ফাইল বাদে

আপনি যদি নীচের দিকে ভিএস ২০১০ দিয়ে তৈরি ওয়েব অ্যাপ্লিকেশনটির প্রকল্প ফাইলটি খুলেন তবে এর সাথে একটি লাইন পাবেন।

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

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

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

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

এই আইটেমটি জনবহুল হিসাবে ঘোষণার মাধ্যমে ফাইলগুলি স্বয়ংক্রিয়ভাবে বাদ দেওয়া হবে। FromTargetএখানে মেটাডেটার ব্যবহার নোট করুন। আমি এখানে notুকব না, তবে আপনাকে সর্বদা এটি নির্দিষ্ট করতে হবে।


3
অতিরিক্ত প্রকল্পের আউটপুট প্রকাশে অন্তর্ভুক্ত করার জন্য আপনি কী নিজের উদাহরণটি প্রসারিত করতে পারেন?
অ্যান্টনি সেরডিউইকোভ

7
আমি ভিএস ২০১২ (আরসি) ইনস্টল করেছি এবং আমার জন্য আলাদা ডিপেন্ডেন্সিপ্রোপার্টি ছিল। মিশ্র দলগুলিকে সমর্থন করার জন্য (এবং আমাদের বিল্ড সার্ভার), আমার কাছে আসল কপিআলফিলসটসসিংলফোল্ডারফরপ্যাকডডিপেন্ডসঅন কনফিগারেশন এবং ডিপেন্ডেন্সিপ্রোপার্টি কপিরাইট অলফাইলসটোসিংলফোল্ডারফর্মসডেপ্লয়ডাইপেন্ডসঅন
এমিল লার্চ

2
এটা চমৎকার. এটি একটি টেক্সট ফাইলে সঞ্চিত কিছু সংস্করণ তথ্য স্থাপন করতে ব্যবহার করে।
lamarant

5
এটি আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। আমি ভি স্টুডিও 2013 ব্যবহার করছি: :( উপরের এমএসবিল্ড সেটআপ কাজটি কি 2013 এর জন্য?
ইরপ্রেজ

8
@ সায়েদআইব্রাহিম হাশিমি এবং কো। এএসপিএন ওয়েবসাইটে এই গাইডটির আরও অনেক আধুনিক সংস্করণ তৈরি করা হয়েছে । আমি সেই লিঙ্কটি অত্যন্ত প্রস্তাব দিই, যেহেতু আমার মধ্যে pubxML ফাইলের পরিবর্তে সিএসপ্রোজ ফাইলটি সংশোধন করতে আটকে যাওয়ার মধ্যে পার্থক্য ছিল।
অ্যাডাম ভেনিজিয়া

21

একটি সহজ সমাধান হ'ল সিএসপোজ ফাইলটি সম্পাদনা করে প্রয়োজনীয় বিন্যাসটি বিন ফোল্ডারে অন্তর্ভুক্ত করতে হবে এবং তারপরে আইটেমটি অনুলিপিটিতে ফোল্ডারে অনুলিপি করার জন্য একটি প্রাক-বিল্ড লক্ষ্য তৈরি করতে হবে যেখানে আমরা আমাদের ২ য় পক্ষের ডিএলএস সঞ্চয় করি library কারণ আইটেমটি সমাধান ফাইলটিতে বিদ্যমান এটি এমএসবিল্ড / এমএসডিপ্লয় দ্বারা মোতায়েন করা হয় এবং জটিল কিছুই প্রয়োজন হয় না।

ভিএস এর মাধ্যমে যোগ না করেই ফাইল অন্তর্ভুক্ত করতে ব্যবহৃত ট্যাগ (এটি সাধারণত আপনার ভিসিএসে যুক্ত করতে চাইবে)

<Content Include="Bin\3rdPartyNative.dll" ><Visible>false</Visible></Content>

এটি আমার জন্য কাজ করা বিয়ার বিল্ড লক্ষ্য:

<Target Name="BeforeBuild">
    <Message Text="Copy $(SolutionDir)Library\3rdPartyNative.dll to '$(TargetDir)'3rdPartyNative.dll" Importance="high" />
    <Copy SourceFiles="$(SolutionDir)Library\3rdPartyNative.dll" DestinationFiles="$(TargetDir)3rdPartyNative.dll" />
</Target>

প্রবেশদ্বারটি লুকিয়ে রাখার জন্য @ টিউসপেটেরের পরামর্শ অন্তর্ভুক্ত করার জন্য সম্পাদিত এটি দৃশ্যমান বিন ফোল্ডারের পূর্ববর্তী দিকটি সরিয়ে ফেলবে। আমার দ্বারা যাচাই করা হয়নি


3
"সরলতা হ'ল চূড়ান্ত পরিশীলন"
বর্নটোকোড

1
এটি অনেক ক্ষেত্রে কাজ করে তবে আপনার যদি বিন ফোল্ডারের বাইরে অন্তর্ভুক্ত করার মতো ফাইল থাকে তবে কাজ করে না।
নাথান

5
@ টেক্সাক, আমি কিছু অনুপস্থিত হতে পারে, তবে আমি যে সমস্যার মুখোমুখি হয়েছি তা হ'ল আমার আসলে ডিপ্লোমেন্ট প্যাকেজটিতে এমন একটি ফাইলের ফাইলের দরকার ছিল যা বিন ফোল্ডারে ছিল না । সুতরাং হ্যাঁ, আপনি যে কোনও জায়গা থেকে বিন ফোল্ডারে ফাইলগুলি অনুলিপি করতে পারেন, তবে সেগুলিকে সেই দৃশ্যে মোতায়েন করার প্যাকেজে সঠিক জায়গায় অন্তর্ভুক্ত করা হবে না। এর মূল্যের জন্য, আমি যে পরিস্থিতিটি ছড়িয়ে দিয়েছি তা ছিল ক্লিয়ারস্ক্রিপ্ট.ভি 8 প্রকল্পের সাথে - নেটিভ .dlls অবশ্যই বিন ডিরেক্টরিতে উপস্থিত হবে না , তবে অবশ্যই তার পিতামাতার সাথে উপস্থিত হতে হবে - আলোচনার জন্য ক্লিয়ারস্ক্রিপ্ট কোডপ্লেক্স / ডিসকশনস / 438696 দেখুন ।
নাথান

3
আমি পারলে আরও দশবার উত্সাহ দিতাম। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। আমি যোগ করতে চাই যে আপনি <Visible>false</Visible>এটি সমাধান এক্সপ্লোরার থেকে গোপন করতে সেট করতে পারেন ।
মঙ্গলবার

1
@ তোহিদ ধন্যবাদ, যে সম্পাদনা করেছেন। পরীক্ষার জন্য কোনও এমএস স্টাফ নেই যাতে আমি এটি যাচাই করে নিই।
toxaq

7

@ টক্সাকের মতো, তবে একটি আরও সহজ সমাধান হ'ল:

সমাধান এক্সপ্লোরারটিতে ফাইলটি লাইব্রেরি / রেফারেন্স ফোল্ডারে একটি লিঙ্ক হিসাবে যুক্ত করুন এবং তারপরে বৈশিষ্ট্যগুলি সেট করে এটি বিল্ডের আউটপুটে অনুলিপি করা হবে।


3
-1 এটি ধরে নেয় যে প্রকল্পটি সুস্পষ্ট লিঙ্কার-টাইম সম্পর্ক রাখতে চায়। প্লাগ-ইন টাইপ সিস্টেমগুলির জন্য উপযুক্ত নয়
মিকিডি

6

সুতরাং সাedদের বাস্তবায়ন আমার পক্ষে কার্যকর হয়নি। আমি ভিএস ২০১৩ ব্যবহার করছি এবং ওয়েব ডিপ্লয় প্যাকেজটি ব্যবহার করছি এবং ডিফলি প্যাকেজের বিনটিতে অন্য ফোল্ডার থেকে কিছু প্লাগইন ডিএলএল যুক্ত করা দরকার। আমি এটি কীভাবে এটি পরিচালনা করতে সক্ষম হলাম তা (অনেক সহজ):

আপনার সিএসপোজ ফাইলের নীচে যুক্ত করুন:

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <ItemGroup> 
        <Files Include="..\SomeOtherProject\bin\$(Configuration)\*.*"/>
    </ItemGroup>
    <Copy SourceFiles="@(Files)" DestinationFolder="$(_PackageTempDir)\bin\" />  
</Target>

সিএসপোজ ফাইলটিতে অন্যান্য উল্লেখযোগ্য:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <DeployOnBuild>true</DeployOnBuild>
    <DeployTarget>Package</DeployTarget>
    <DeployIisAppPath>Default Web Site/MyWebsite</DeployIisAppPath>
    <DesktopBuildPackageLocation>..\output\Service\Service\Service.Release.zip</DesktopBuildPackageLocation>
    <FilesToIncludeForPublish>OnlyFilesToRunTheApp</FilesToIncludeForPublish>
    <ExcludeGeneratedDebugSymbol>true</ExcludeGeneratedDebugSymbol>
    <PublishDatabases>false</PublishDatabases>
</PropertyGroup>

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" />

ধন্যবাদ. আমি ভিএস ২০১৫ ব্যবহার করছি এবং অন্য একটি প্রকল্পের বিন ফোল্ডার থেকে আমারও ডিএলএলএস যুক্ত করা দরকার। আপনার সমাধানটি সবচেয়ে সহজ ছিল এবং নির্দোষভাবে কাজ করেছিলেন।
রাফেল

5

উপরের এমিল লোর্চের মন্তব্যে জোর দেওয়ার জন্য মন্তব্য করতে চেয়েছিলেন। আপনি যদি একটি অ্যাজুর এসডিকে ইনস্টল করে থাকেন তবে আলাদা ডিপেন্ডেন্সিপ্রোপার্টিটি সন্ধান করুন।

মূলত, আপনার "কপিআলএফএলফিলিজটলসিংসফোল্ডারফোর্ডপ্যাকেজডেপেন্ডসঅন" এর পরিবর্তে "কপিএলএফএলফিলসটলসিংডলফোল্ডারফ্যাকারডিপেন্ডসঅন" ব্যবহার করার প্রয়োজন হতে পারে I'm আমি সত্যিই একজন উন্নত এমএসবিল্ড লোক নই এবং কেন আমার লক্ষ্যগুলি ডাকা হচ্ছে না তা নির্ধারণের চেষ্টা করার জন্য আমি আমার চুলগুলি টানতে ঘন্টা নষ্ট করি।

এটি অন্য লিঙ্কটি যদি এটি আপনার পক্ষে কাজ করে না এবং আপনি একটি অ্যাজুর এসডিকে ইনস্টল করেছেন: http://forums.iis.net/t/1190714.aspx


3

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

তাই আমি উপরে পোস্ট করা কপিআলএফএলফিটসটোসিংলফোল্ডারফোর্স প্যাকেজডিপেন্ডসঅন ট্রিক ব্যবহার করে আমার এক্সক্লুডফ্র্যামপ্যাকেজ ফাইলস তালিকা তৈরি করার চেষ্টা করেছি। তবে, প্যাকেজিং প্রক্রিয়া ইতিমধ্যে এক্সক্লুডফ্রমপ্যাকেজফিলস আইটেমগুলি সরিয়ে নিয়েছে বলে এটি অনেক দেরিতে। সুতরাং, আমি একই কৌশলটি ব্যবহার করেছি, তবে একটু আগে:

<PropertyGroup>
    <ExcludeFilesFromPackageDependsOn>
        $(ExcludeFilesFromPackageDependsOn);
        _ExcludeAzureDlls
    </ExcludeFilesFromPackageDependsOn>
</PropertyGroup>

<Target Name="_ExcludeAzureDlls">
    <ItemGroup>
        <FilesForPackagingFromProjectWithNoAzure Include="@(FilesForPackagingFromProject)"
                               Exclude="%(RootDir)%(Directory)*Azure*.dll" />
        <AzureFiles Include="@(FilesForPackagingFromProject)"
                    Exclude="@(FilesForPackagingFromProjectWithNoAzure)" />
        <ExcludeFromPackageFiles Include="@(AzureFiles)">
            <FromTarget>_ExcludeAzureEnvironmentDlls</FromTarget>
        </ExcludeFromPackageFiles>
    </ItemGroup>
</Target>

আশা করি যে কাউকে সাহায্য করবে ...


1

এছাড়াও, ফাইলটি সামগ্রী হিসাবে সেট করা সম্ভব সর্বদা অনুলিপি করুন

এছাড়াও, ফাইলটি সামগ্রী হিসাবে সেট করা সম্ভব  সর্বদা অনুলিপি করুন


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