DotNET: Difference between revisions

From NixOS Wiki
imported>Fufexan
m Add page to Development category
imported>Aerphanas
added how to fix .net location not found
Line 80: Line 80:


msbuild reference: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2022
msbuild reference: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2022
== .NET location: Not found ==
set DOTNET_ROOT Environment Variable
<syntaxHighlight lang=nix>
environment.sessionVariables = {
  DOTNET_ROOT = "${pkgs.dotnet-sdk}";
};
</syntaxHighlight>
see : https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables#net-sdk-and-cli-environment-variables


== missing NuGet packages ==
== missing NuGet packages ==

Revision as of 08:51, 20 December 2022

dotnet packages can be built with buildDotnetPackage

example build file:

/*
some_program/default.nix
nix-build -E 'with import <nixpkgs> { }; callPackage ./default.nix { }'
*/

{ lib
, stdenv
, fetchFromGitHub
, buildDotnetPackage
, dotnetPackages
, pkg-config
}:

buildDotnetPackage rec {
  pname = "some_program";
  baseName = pname; # workaround for "called without baseName"
  version = "some_version";
  src = fetchFromGitHub {
    owner = "some_owner";
    repo = pname;
    rev = "v${version}";
    sha256 = ""; # todo
  };
  projectFile = ["path/to/some_project.csproj"];
  propagatedBuildInputs = [
  ];
  buildInputs = [
    # unit tests
    dotnetPackages.NUnit
    dotnetPackages.NUnitRunners
  ];
  nativeBuildInputs = [
    pkg-config
  ];
  meta = with lib; {
    homepage = "some_homepage";
    description = "some_description";
    license = licenses.mit;
  };
}

XML namespace error

xbuild tool is deprecated and will be removed in future updates, use msbuild instead

The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.

workaround: in buildPhase, replace xbuild with msbuild

{ lib
# ...
, msbuild
}:

buildDotnetPackage rec {
  # ...
  projectFile = "path/to/some_project.csproj";
  # ...
  buildInputs = [
    msbuild
  ];
  buildPhase = ''
    runHook preBuild
    msbuild /p:Configuration=Release ${projectFile}
    runHook postBuild
  '';
}

msbuild reference: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2022

.NET location: Not found

set DOTNET_ROOT Environment Variable

environment.sessionVariables = {
  DOTNET_ROOT = "${pkgs.dotnet-sdk}";
};

see : https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables#net-sdk-and-cli-environment-variables

missing NuGet packages

example error:

error : This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ../../packages/Microsoft.Bcl.Build.1.0.21/build/Microsoft.Bcl.Build.targets.

these are upstream bugs

as workaround, patch all *.csproj files, to remove all XML tags that contain the "missing file" paths, for example

<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')" />

see also https://stackoverflow.com/questions/32254439/nuget-packages-are-missing

See also