0

我正在尝试使用 nix 来构建 dotnet (sdk 5) 项目。

配置类似于

stdenv.mkDerivation {
# builder = "${bash}/bin/bash";
# args = [ ./builder.sh ];
name = "mypackage";
src = ./.;
HOME = "/tmp/test-home";
DOTNET_CLI_TELEMETRY_OPTOUT = 1;
nativeBuildInputs = [ nodejs ];
buildInputs = [ dotnet openssl cacert  ];
configurePhase = ''
  export HOME=$PWD/home
  runHook preConfigure
  dotnet nuget list source
  dotnet nuget locals all --list
  dotnet restore
  runHook postConfigure
'';
buildPhase = ''
  export DOTNET_CLI_TELEMETRY_OPTOUT=1
  export DOTNET_NOLOGO=1
  ${dotnet}/bin/dotnet publish ProjectDirectory --self-contained -r linux-x64 -c Release
'';
installPhase = ''
  mkdir -p $out/
'';

};

for 参数中的HOME属性stdenv.mkDerivation仅适用于 nix-shell。由于 nix-shell 将继承 normal $HOME,我需要设置$HOME到另一个空目录来模仿构建阶段的行为。

  • 手动使用nix-shell和运行时,它工作正常。dotnet restore

  • 使用时nix-build,构建失败,运行时出现以下错误dotnet restore

    注册来源:

    1. nuget.org [已启用] https://api.nuget.org/v3/index.json http-cache: /build/PROJECTNAME/home/.local/share/NuGet/v3-cache global-packages: /build/PROJECTNAME /home/.nuget/packages/ temp: /build/NuGetScratch plugins-cache: /build/PROJECTNAME/home/.local/share/NuGet/plugins-cache 正在确定要恢复的项目... /nix/store/fvfyn01fjmawvyn7vlhhrgkzyy6321wl-dotnet -sdk-5.0.202/sdk/5.0.202/NuGet.targets(131,5):错误:无法加载源https://api.nuget.org/v3/index.json的服务索引. [/build/PROJECTNAME/PET-CT-machine-service.sln] /nix/store/fvfyn01fjmawvyn7vlhhrgkzyy6321wl-dotnet-sdk-5.0.202/sdk/5.0.202/NuGet.targets(131,5):错误:名称或服务未知 (api.nuget.org:443) [/build/PROJECTNAME/PET-CT-machine-service.sln] /nix/store/fvfyn01fjmawvyn7vlhhrgkzyy6321wl-dotnet-sdk-5.0.202/sdk/5.0.202/NuGet .targets(131,5):错误:名称或服务未知 [/build/tomopioneer/PET-CT-machine-service.sln]

手动设置nix-buildnix-shell --pure何时设置有什么区别?HOME

通过从 github NixOS/nixpkgs 存储库读取代码,似乎有几个 dotnet 包正在nuget手动使用并dotnet restore与本地源一起使用。那有必要吗?


我对 api.nuget.org 进行了更多测试。

运行curl https://api.nuget.org/v3/index.json -v,我得到:

  • 直接在 nixos 终端下运行时工作正常
  • 工作正常nix-shell --pure
  • 中的错误nix-buildcurl: (6) Could not resolve host: api.nuget.org
4

0 回答 0