[概要] とある理由で常にオフラインのPCでdotnet publishやNuGetを利用したい。 しかしNuGetはオンライン前提のようで今の状態では利用不可能となっている。 この問題を解決したい。 つまり、下記の処理を行いたい。 ■ .NET5での自己完結型の作成をオフラインで行う ■ CommonDialog等のようなNuGetを使うpackageの導入をオフラインで行う(DL時はオンラインでもOK)
趣味でC#( .NET5 )をやっています。
とある理由から自分のPCでは常にオフライン状態です。また、その理由が原因で、VC#も利用できないとします。
なので、
dotnet publish -c Release --self-contained true -r win-x64
としても、
C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : ソース https://api.nuget.org/v3/index.json のサービス インデックスを読み 込めません。 [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 (api.nuget.org:443) [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 [<対象プロジェクト>.csproj]
というエラーを吐きます。
C:\Program Files\dotnet\sdk\5.0.201\NuGet.targetsの131行目は、
<RestoreTask RestoreGraphItems="@(_RestoreGraphEntryFiltered)" RestoreDisableParallel="$(RestoreDisableParallel)" RestoreNoCache="$(RestoreNoCache)" RestoreIgnoreFailedSources="$(RestoreIgnoreFailedSources)" RestoreRecursive="$(RestoreRecursive)" RestoreForce="$(RestoreForce)" HideWarningsAndErrors="$(HideWarningsAndErrors)" Interactive="$(NuGetInteractive)" RestoreForceEvaluate="$(RestoreForceEvaluate)" RestorePackagesConfig="$(RestorePackagesConfig)"/> </Target>
となっています。
手順としては、
1. プロジェクトを生成する場所をカレントディレクトリとする 2. dotnet new console -n <プロジェクト名> のようにして生成する 3. そのまま dotnet publish -c Release --self-contained true -r win-x64 と叩く -> ここでエラーが発生
となっています。
調べたところによると、どうやらNuGetを使っており、オンラインでやる前提みたいです。
ですが、私の環境ではとある理由からオフラインでしか開発できません。
こういう場合、どのようにすればpublishやNuGetを使うもの(例: CommonDialog等)をオフラインで利用できるでしょうか?
「C# dotnet publish オフライン」で調べても『VisualStudio C#で組む前提』となっており、私の環境とは別物で参考になりません。
[試したこと1] 「C# dotnet publish オフライン」でggる ↓ [結果] VC#を前提とした使い方で、VC#の設定をいじる方法であったため参考にならず。
[試したこと2] 「C# nuget オフライン」でggる ↓ [結果] VC#を前提とした使い方で、VC#の設定をいじる方法であったため参考にならず。
もうちょっと調べてみると、「一度オンライン状態でpublishやNuGetするとC:\Users<ユーザ名>等にパッケージがインストールされる」らしいので、
試したこと3~5もやってみました。
注意: 自分のPCをMainPC, 一時的にオンラインにしてpublish版としてコンパイルするためのPC(借り物)をSubPCとする。
[準備]
SubPCでdotnet publishでやり、C:\Users<ユーザ名> にある .templateengine と .nuget ディレクトリ、
C:\Users<ユーザ名>\AppData\Local にある NuGetディレクトリをそれぞれ丸ごと USBメモリにコピー。
[試したこと3] 準備で用意したUSBメモリをMainPCに接続し、.nugetディレクトリを同じ場所(ユーザ名は異なる)に配置。 そして dotnet publsih ~ でやる。(もちろんオフライン) ↓ [結果] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : ソース https://api.nuget.org/v3/index.json のサービス インデックスを読み 込めません。 [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 (api.nuget.org:443) [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 [<対象プロジェクト>.csproj]
[試したこと4] 準備で用意したUSBメモリをMainPCに接続し、三つのディレクトリをそれぞれ同じ場所(ユーザ名は異なる)に配置。 そして dotnet publsih ~ でやる。(もちろんオフライン) (つまり .templateengine と .nuget 、NuGet のそれぞれのディレクトリを再現) ↓ [結果] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : ソース https://api.nuget.org/v3/index.json のサービス インデックスを読み 込めません。 [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 (api.nuget.org:443) [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 [<対象プロジェクト>.csproj]
[試したこと5] 試したこと4の状態で、C:\Users\<ユーザ>.templateengineにあるsettings.jsonに記述されているパスのユーザ名を書き換える (MainPCとSubPCではユーザ名が違うので) ↓ [結果] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : ソース https://api.nuget.org/v3/index.json のサービス インデックスを読み 込めません。 [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 (api.nuget.org:443) [<対象プロジェクト>.csproj] C:\Program Files\dotnet\sdk\5.0.201\NuGet.targets(131,5): error : そのようなホストは不明です。 [<対象プロジェクト>.csproj]
つまり、なんら変化がありませんでした。
今私が思いつくものすべて試してみましたが、変化がありません。
できればオフライン状態のMainPCでどうにか利用できたら楽なのですが…
ちなみに、publishでも--self-contained true -r win-x64
を削除するとちゃんと動くが、dotnet build -c Release
と構成が全く同じになる。
[情報]
言語: C#
.NET: .NET5( 5.0.201 )
VC#: 利用不可
エディタ: VSCode (← 関係ないけど書いておく)
PCの状態: 常にオフラインで、必要があれば借り物のPCからDL
[追記1]
radianさんが提示してくださったページを参考にやってみました。
ここからMicrosoft.NETCore.App.Runtime.win-x64等をDLし、
ソースコードがあるディレクトリに packages ディレクトリを生成してその中にmicrosoft.netcore.platforms.5.0.0.nupkg等のパッケージを配置。
(本質問のやつだと『バージョンが違う』系のエラーが出たので上記サイトからDL。エラーメッセージはコピーとるのを忘れてしまいましたが…)
そして、dotnet dotnet nuget locals all -clear
と打ち、初期化。
dotnet add package microsoft.netcore.platforms -s .\local-packages
とやって、
プロジェクトファイル( *.csproj )の PropertyGroupに <RestoreSources>$(RestoreSources);./packages</RestoreSources>
と追記し、
dotnet restore
とやってみました。
一応、microsoft.netcore.platforms は一応書き込まれるようですが、 Microsoft.NETCore.App.Runtime.win-x64とかで
dotnet restore 復元対象のプロジェクトを決定しています... <プロジェクトのパス>.csproj : error NU1213: パッケージ Microsoft.NETCore.App.Runtime.win-x64 5.0.0 には、このプロジェクトと互換性のないパッケージの種類 DotnetPlatform が含まれています。 <プロジェクトのパス>.csproj を復元できませんでした (449 ms)。
となってしまいます…
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/22 10:36