DotNET: Difference between revisions

From NixOS Wiki
imported>Milahu
m wording
imported>Milahu
XML namespace error: how to replace xbuild with msbuild
Line 49: Line 49:


<blockquote>
<blockquote>
xbuild tool is deprecated and will be removed in future updates, use msbuild instead
<nowiki>
<nowiki>
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.  
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.  
Line 54: Line 56:
</blockquote>
</blockquote>


TODO
workaround: in <code>buildPhase</code>, replace <code>xbuild</code> with <code>msbuild</code>
 
<syntaxHighlight lang=nix>
{ lib
# ...
, msbuild
}:
 
buildDotnetPackage rec {
  # ...
  projectFile = "path/to/some_project.csproj";
  # ...
  buildInputs = [
    msbuild
  ];
  buildPhase = ''
    msbuild /p:Configuration=Release ${projectFile}
  '';
}
</syntaxHighlight>


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

Revision as of 16:04, 1 March 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 = ''
    msbuild /p:Configuration=Release ${projectFile}
  '';
}

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