質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

オフラインでdotnet publish や NuGetを利用する方法

BeatStar
BeatStar

総合スコア4721

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

3回答

1評価

0クリップ

2028閲覧

投稿2021/12/21 04:57

編集2021/12/22 10:33
[概要] とある理由で常にオフラインの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)。

となってしまいます…

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。