visual studio 2010 - visual - এই প্রকল্পটি এই কম্পিউটারে অনুপস্থিত নুগেট প্যাকেজ(গুলি) উল্লেখ করে




visual studio 2017 offline installer (10)

আমার কাছে একটি ASP.NET MVC5 অ্যাপ্লিকেশন আছে যা গতকাল কাজ করেছে এবং এখন আমি এটি তৈরি করার চেষ্টা করার সময় এই ত্রুটিটি পাচ্ছি:

এই প্রকল্পটি এই কম্পিউটারে অনুপস্থিত নুগেট প্যাকেজ (গুলি) উল্লেখ করে।

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


.Csproj ফাইলের মধ্যে লাইন নিচে সরানো

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
 <ErrorText>This project references NuGet package(s) that are missing on this computer. 
 Enable NuGet Package Restore to download them.  For more information, see 
 http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" 
Text="$([System.String]::Format('$(ErrorText)', 
'$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

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

তাই আমি আমার .csproj ফাইল থেকে পরিবর্তন:

  <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
   <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

করুন:

 <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />

এবং বিল্ড আবার কাজ ছিল।


আমার ক্ষেত্রে, আমি .csproj ফাইল থেকে নিম্নলিখিতগুলি মুছে ফেলতে হয়েছিল:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

আসলে, এই স্নিপেটে আপনি দেখতে পাবেন যে ত্রুটি বার্তাটি কোথা থেকে আসছে।

আমি এমএসবিল্ড-ইন্টিগ্রেটেড প্যাকেজ রিস্টোর থেকে স্বয়ংক্রিয় প্যাকেজ রিস্টোরে রূপান্তর করছিলাম ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


আমার জন্য এটি কাজ করেছে যেহেতু আমি বিদ্যমান একটি সমাধান সমাধান থেকে একটি। Nuget ফোল্ডারটি অনুলিপি করেছি এবং এর বিষয়বস্তু উল্লেখ করেছি!


আমি যখন আমার এমভিসি ওয়েব অ্যাপ্লিকেশনে ক্লাস লাইব্রেরির রেফারেন্স করি তখন একই সমস্যা ছিল,

ইস্যুটি দুটি প্রকল্পের মধ্যে nuget প্যাকেজ সংস্করণ নম্বর দ্বিধা ছিল।

প্রাক্তন: আমার ক্লাস লাইব্রেরিতে 1.2.3 এর লগ 4 নেট ছিল কিন্তু আমার ওয়েবপৃষ্ঠে 1.2.6 ছিল

ঠিক আছে: ঠিক নিশ্চিত করুন যে প্রকল্পটিতে একই সংস্করণ নম্বর উল্লেখ আছে।


আমি সমাধান রুট ফোল্ডারে '.nuget' নামক একটি ফোল্ডার তৈরি করেছি, তারপর নীচের কন্টেন্ট সহ এই ফোল্ডারে 'NuGet.Config' ফাইল যোগ করা হয়েছে।

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
 <add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

তারপর $। (MSBuildProjectDirectory) হিসাবে নীচের ফাইল '.nuGet.targets' তৈরি করেছেন। \

    <!-- Enable the restore command to run before builds -->
    <RestorePackages Condition="  '$(RestorePackages)' == '' ">false</RestorePackages>

    <!-- Property that enables building a package from a project -->
    <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>

    <!-- Determines if package restore consent is required to restore packages -->
    <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

    <!-- Download NuGet.exe if it does not already exist -->
    <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
</PropertyGroup>

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
    <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
    <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
    <PackagesConfig>packages.config</PackagesConfig>
    <PackagesDir>$(SolutionDir)packages</PackagesDir>
</PropertyGroup>

<PropertyGroup>
    <!-- NuGet command -->
    <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
    <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>

    <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
    <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>

    <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>

    <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
    <!-- Commands -->
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand>
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        $(BuildDependsOn);
    </BuildDependsOn>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(BuildPackage) == 'true'">
        $(BuildDependsOn);
        BuildPackage;
    </BuildDependsOn>
</PropertyGroup>

<Target Name="CheckPrerequisites">
    <!-- Raise an error if we're unable to locate nuget.exe  -->
    <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
    <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " />
    <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')"  />
</Target>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)" 
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <OutputFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Net" />
        <Using Namespace="Microsoft.Build.Framework" />
        <Using Namespace="Microsoft.Build.Utilities" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                OutputFilename = Path.GetFullPath(OutputFilename);

                Log.LogMessage("Downloading latest version of NuGet.exe...");
                WebClient webClient = new WebClient();
                webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);

                return true;
            }
            catch (Exception ex) {
                Log.LogErrorFromException(ex);
                return false;
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

 <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <EnvKey ParameterType="System.String" Required="true" />
        <EnvValue ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Using Namespace="System" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);
            }
            catch  {
            }
        ]]>
        </Code>
    </Task>
</UsingTask>


এই সমস্যাগুলি সমাধানের জন্য আমি এই পদক্ষেপগুলি ব্যবহার করেছি:

আপনার সমাধান nuget প্যাকেজ যোগ করার জন্য:

  1. আপনি nuget প্যাকেজ উল্লেখ করতে চান প্রকল্প (সমাধান না) উপর ডান ক্লিক করুন।
  2. চয়ন করুন: nget প্যাকেজ পরিচালনা করুন
  3. পপআপ উইন্ডোতে বাম দিকে আপনার তিনটি পছন্দ রয়েছে। যদি আপনি অনলাইন> মাইক্রোসফ্ট এবং .NET চয়ন করেন , তবে আপনি Microsoft ASP.NET ওয়েব API 2.2 প্যাকেজ grouper ইনস্টল করতে সক্ষম হবেন (অথবা আপনার যা প্রয়োজন প্যাকেজ - খনি এটি ছিল)।
  4. এখন আপনার সমাধান (প্রকল্প নয়) ডান ক্লিক করুন এবং nget প্যাকেজ পুনরুদ্ধার সক্ষম করুন । এই প্যাকেজগুলি স্বয়ংক্রিয়ভাবে সংকলনে ডাউনলোড করা হবে।

এক সমাধান .csproj ফাইলটি থেকে সরিয়ে ফেলতে হবে:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

কিভাবে?

  1. ডান প্রকল্পের উপর ক্লিক করুন। আনলড প্রকল্প।
  2. ডান প্রকল্পের উপর ক্লিক করুন। Csproj সম্পাদনা করুন।
  3. ফাইল থেকে অংশ মুছে ফেলুন। সংরক্ষণ করুন।
  4. ডান প্রকল্পের উপর ক্লিক করুন। প্রকল্প পুনরায় লোড করুন।

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

প্যাকেজগুলি মুছে ফেলার এবং তারপর যুক্ত করা ভাল ধারণা নয় যতক্ষণ না আপনি প্যাকেজের সর্বশেষ সংস্করণটি ব্যবহার করেন। অন্যথায়, সবসময় আকর্ষণীয় বেশী, বিস্ময়ের জন্য প্রস্তুত করা হবে।

যদি বলা হয়, প্যাকেজ এনটিজি ফ্রেমওয়ার্ক তারপর NuGet গ্যালারি থেকে আপনি সর্বশেষ সংস্করণ পাবেন যা এই মন্তব্যটি লেখার সময় 6.1.3

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

এই বলে, এবং আবার EntityFramework অনুপস্থিত প্যাকেজ হতে দিন, আপনি প্যাকেজ-ম্যানেজার কনসোলে নিম্নলিখিত কমান্ডটি ইস্যু করতে পারেন:

PM> Install-Package EntityFramework -Version 6.0.1 

এটি সঠিক সংস্করণটি ইনস্টল করবে, যা 6.0.1 , যা প্যাকেজ. config এ উল্লেখিত হয়:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.0.1" targetFramework="net451" />
    </packages>

আপনি যদি টিএফএস ব্যবহার করেন

সমাধান এর। .nuget ফোল্ডার থেকে NuGet.exe এবং NuGet.targets ফাইলগুলি সরান। সমাধান কর্মক্ষেত্র থেকে ফাইলগুলি নিজেই মুছে ফেলা হয়েছে তা নিশ্চিত করুন। সূত্র নিয়ন্ত্রণে প্যাকেজ যুক্ত করতে বাইপাস চালিয়ে যেতে NuGet.Config ফাইলটি NuGet.Config রাখুন।

সমাধানটিতে প্রতিটি প্রকল্প ফাইল সম্পাদনা করুন (যেমন, .csproj, .vbproj) এবং NuGet.targets ফাইলের কোনও রেফারেন্স মুছে ফেলুন। আপনার পছন্দসই সম্পাদকের প্রকল্প ফাইলটি খুলুন এবং নিচের সেটিংসটি সরান:

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

আপনি যদি টিএফএস ব্যবহার করেন না

আপনার সমাধান থেকে। .nuget ফোল্ডার সরান। ফোল্ডার নিজেই সমাধান কর্মক্ষেত্র থেকে মুছে ফেলা হয় তা নিশ্চিত করুন।

সমাধানটিতে প্রতিটি প্রকল্প ফাইল সম্পাদনা করুন (যেমন, .csproj, .vbproj) এবং NuGet.targets ফাইলের কোনও রেফারেন্স মুছে ফেলুন। আপনার পছন্দসই সম্পাদকের প্রকল্প ফাইলটি খুলুন এবং নিচের সেটিংসটি সরান:

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

রেফারেন্স: স্বয়ংক্রিয় প্যাকেজ পুনরুদ্ধারের জন্য MSBuild- ইন্টিগ্রেটেড সমাধানগুলি স্থানান্তরিত করা





nuget