মাইক্রোসফ্ট.কোডএনালাইসিস কেন এএসপি.নেট কোর ওয়েবসাইটের সাথে প্রকাশিত হয়?


13

আমি একটি এএসপি.নেট কোর এমভিসি 3.0 ওয়েবসাইট প্রকাশ করছি এবং আউটপুট ফোল্ডারে Microsoft.CodeAnalysisলাইব্রেরিগুলিতে অনেক ভাষায় প্রচুর রেফারেন্স রয়েছে , কেন কেউ জানেন কেন?

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


এটি কোনওরকম প্রকাশনার বিষয়ে নেট কোর 3 সংকলনের মতামতের সাথে সম্পর্কিত বলে মনে হচ্ছে তবে আমি নিশ্চিত নই
জোনাথন

উত্তর:


5

মাইক্রোসফ্ট.কোডএ্যানালাইসিস লাইব্রেরিগুলিতে অনেক ভাষায় প্রচুর রেফারেন্স রয়েছে

আমি 3.0 সংস্করণটি ব্যবহার করার সময় একই সমস্যাটির মুখোমুখি হয়েছি। তবে আমি মনে করি না যে এটি। নেট কোর 3 প্রকাশনার উপর সংকলিত দর্শনগুলির কারণে ঘটেছে কারণ শাখায় ভিউকোম্পিলেশনটিও রয়েছে release/2.1


এটি উত্পাদন পরিবেশে নয় কেবল দেব সময়ে কার্যকর হওয়া উচিত।

  1. আমি বিশ্বাস করি আপনি সঠিক বলেছেন। এই বিশ্লেষণগুলি কেবলমাত্র ডেটিটাইমে ব্যবহার করা উচিত।

  2. তবে আমি যখন SDK (3.0) ম্যানুয়ালি আনইনস্টল করব এবং সর্বশেষতম এসডিকে আবার ইনস্টল করব তখন আমি আর পুনরুত্পাদন করতে পারব না। আমি কেন করি না, সম্ভবত এটি এখন ঠিক হয়ে গেছে। এটি সম্ভবত অন্য কারণে হয়ে থাকে: আমি অন্যান্য প্যাকেজগুলিতে একটি অতিরিক্ত রেফারেন্স যুক্ত করেছি যা মাইক্রোসফ্টের উপর নির্ভর করে accident দুর্ঘটনাক্রমে কোডএনালাইসিস)। যাইহোক, দয়া করে আপনার এসডিকে সর্বশেষতম সংস্করণে আপগ্রেড করুন।

  3. আর একটি গুরুত্বপূর্ণ বিষয় হ'ল, কন্ট্রোলার যুক্ত করতে ভিজ্যুয়াল স্টুডিও ব্যবহার করার সময় এটি Microsoft.VisualStudio.Web.CodeGeneration.Designস্বয়ংক্রিয়ভাবে একটি রেফারেন্স যুক্ত হবে । নোট করুন এই Microsoft.CodeAnalysis.Commonপ্যাকেজের পরোক্ষভাবে প্যাকেজের উপর নির্ভরতা রয়েছে । এখানে Microsoft.CodeAnalysis.Commonমাইক্রোসফ্ট। নেট সংকলক প্ল্যাটফর্ম ("রোজলিন") দ্বারা ব্যবহৃত একটি ভাগ করা প্যাকেজ। আপনি যদি এই প্যাকেজটি ডাউনলোড করেন এবং এই লিবটি ম্যানুয়ালি আনজিপ করেন তবে আপনি দেখতে পাবেন যে এখানে একটি রয়েছে Microsoft.CodeAnalysis.dll:

    microsoft.codeanalysis.common.3.3.1 /
    ├───lib /
    └─── নেটস্ট্যান্ডার্ড 2.0 /
    │ ├─── ...
    ├─── ├─── মাইক্রোসফট.কোডএনালাইসিস.ডিল
    ├─── ├─── মাইক্রোসফট.কোডএনালাইসিস.পিডিবি
    ├─── ├─── মাইক্রোসফ্ট.কোডএনালাইসিস.এক্সএমএল
    │ └─── ...
    ├───package /
    │ └─── ...
    └───_rels /
    

    এই প্যাকেজটি কেবলমাত্র দেব-সময়ে প্রয়োজন at আপনি যদি এই নির্ভরতা অপসারণ না করেন তবে আপনি Microsoft.CodeAnalysisআপনার প্রকাশিত ফোল্ডারে সম্পর্কিত প্রচুর পরিমাণে dlls পাবেন ।

    <ItemGroup>
        <!-- this is not necessary when publishing -->
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" />
    </ItemGroup>

    নির্ভর করে এমন প্যাকেজগুলি সরান Microsoft.CodeAnalysis, এবং তারপরে আপনার কোনও Microsoft.CodeAnalysisসম্পর্কিত dlls পাওয়া উচিত নয় :

    এখানে চিত্র বর্ণনা লিখুন


কোন প্যাকেজের মাইক্রোসফট-কোডে অ্যানালাইসিসের প্রত্যক্ষ বা অপ্রত্যক্ষ নির্ভরতা আছে তা আমি কীভাবে দেখতে পারি?
জোনাথন


ঠিক আছে আপনি মাইক্রোসফ্ট.ভিজুয়াল স্টুডিও.ওয়েব.কোডজেনারেশন.ডিজিন প্যাকেজটির উপর নির্ভরতা রয়েছে বলে এটি বলেছেন। সবার কাছে প্রাইভেটএসেটস সম্পত্তি সেট করে, মাইক্রোসফ্ট.কোডএ্যানালাইসিস ফাইলগুলি আর প্রকাশিত প্রকল্পে নেই। কোড জেনারেশনটি এখনও ঠিকঠাক কাজ করবে কিনা তা ঠিক নয় কারণ এখন প্রকল্পের নির্ভরতা তালিকার প্যাকেজের উপরে একটি হলুদ ত্রিভুজ রয়েছে।
জোনাথন

@ জোনাথন আপনার কেবলমাত্র বিকাশের সময় এই প্যাকেজটির প্রয়োজন। প্রকৃতপক্ষে, আপনার যদি ভাসমান বৈশিষ্ট্যটির প্রয়োজন না হয়, যেমন ভিএসকোড ব্যবহার করে, আপনি এ জাতীয় নির্ভরতা একেবারেই যুক্ত করবেন না।
itminus

@ জোনাথন যদি আপনার ভাসা দরকার হয়, ভিএস ব্যবহার করার সময়, প্যাকেজটি আবার ইনস্টল করা হবে। আপনি যদি ভিএসকোড / সিএলআই ব্যবহার করেন তবে আপনাকে অনুরোধ করার আগে এই জাতীয় প্যাকেজ যুক্ত করতে হবেdotnet aspnet-codegenerator controlller ...
itminus

10

আমার জন্য, *.csprojফাইলটির অভ্যন্তরে এই লাইনটি কোনওভাবে সমস্যাটি সমাধান করেছে। এটি এখনও স্থাপন করে Microsoft.CodeAnalysisতবে কেবল এর জন্য en:

<PropertyGroup>
  <!-- ... -->
  <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>

দেখুন মন্তব্য গিটহাব বিষয়ে (জোনাথন Marolf দ্বারা)।


এটি আমার জন্য এএসপি.নেট কোর 3.0 তে কাজ করেছে এবং দেশের ফোল্ডারগুলিকে আটকা দিয়েছে। আমার প্রয়োজন নেই এমন "রানটাইমস" ফোল্ডারের সাবফোল্ডারগুলিকে আটকাতে কি সম্ভব হবে (ইউনিক্স ইত্যাদি)?
Gen1-1

@ Gen1-1 দয়া করে এই প্রশ্নের .NET কোর সংক্রান্ত 2.1 দেখুন: stackoverflow.com/questions/53507229/...
mrmowji

ধন্যবাদ। সুতরাং প্রকাশের সময় এটি সম্ভব, তবে আমি অনুমান করি যে কেবল বিল্ডিং / সংকলন করার সময় আপনি নষ্ট ফোল্ডারগুলি আটকাতে পারবেন না।
জেন 1-1 21

3

সমাধানটি দেখার সহজতর করার চেষ্টা করার জন্য আমার পদক্ষেপ এখানে।

সমস্যাটি, সম্ভবত ব্যবহারের চেয়ে বেশি AddRazorRuntimeCompilation()। আরও সুনির্দিষ্টভাবে, শুরুতে আপনি সম্ভবত রেজার রানটাইম সংকলনটি যুক্ত করতে পারেন:

     IMvcBuilder builder = services.AddControllersWithViews()
                          .AddRazorRuntimeCompilation(); 

এবং এটি সমর্থন করার জন্য, আপনার ওয়েব প্রকল্পের সম্ভবত একটি উল্লেখ রয়েছে Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

এই নুগেট প্যাকেজের উপর নির্ভরতা রয়েছে Microsoft.CodeAnalysisযে প্রকাশিত ফোল্ডারে যে সমস্ত অযাচিত আউটপুট তৈরি করে।

সমাধানটি হ'ল প্রকল্প ফাইলটি সম্পাদনা করা এবং ডিবাগ মোডে নির্ভরতা শর্তযুক্ত করে দেওয়া:

    <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" 
Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />
  </ItemGroup>

এবং তারপরে স্টার্টআপ। ফাইলগুলিতে শর্তসাপেক্ষে কল করুন AddRazorRuntimeCompilation():

    IMvcBuilder builder = services.AddControllersWithViews();

     #if DEBUG
            if (Env.IsDevelopment()) {
                builder.AddRazorRuntimeCompilation();
            }
      #endif

এটি Microsoft.CodeAnalysisকেবলমাত্র ডিবাগ মোডে সংকলন করার সময় সমস্ত গ্রন্থাগারগুলি বাইরে চলে আসবে। সুতরাং এখন আপনি যখন প্রকাশের মোড ব্যবহার করে প্রকাশ করবেন তখন তারা আউটপুটের অংশ হবে না।


1
আইওয়েবহোস্টএনভায়রনমেন্ট (উপরের উদাহরণে এনভ) কনফিগার সার্ভিসগুলিতে সহজেই উপলভ্য নয় (যদিও) আপনি এটি বেশ সহজেই প্রকাশ করতে পারেন। stackoverflow.com/questions/37660043/...
আন্তোনিও Nicolaas Teyken

অ্যান্টোনিওনোকোলাসটেকেন দুর্দান্ত সংযোজন, এটি একটি গুরুত্বপূর্ণ বিবরণ যা আমি বুঝতে পারি নি যে আমি উপভোগ করেছি।
রন সি

0

হতে পারে এটি কাউকে সাহায্য করতে পারে, আমার ক্ষেত্রে সমস্যাটি ছিল "মাইক্রোসফট.ভিজুয়ালস্টুডিও.উইব.কোডজেনারেশন.ডিজিগ", এক্সক্লুডএসেটস = "সমস্ত" অন্তর্ভুক্ত করার জন্য আমার ".csproj" ফাইলটিতে প্যাকেজ রেফারেন্সটি পরিবর্তন করা দরকার:

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.