Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • <Import Project="$(RootPath)TIME\Solutions\IncludeGlobalAssembly.targets" /> to set the global assembly - no AssemblyInfo.cs is required anymore - these properties are set in the csproj file.
  • <Import Project="$(RootPath)RiverSystem\Solutions\NormalisePdbBuildRoot.targets" /> to configure the normalization of pdbs
  • CopyReferences are done via the Directory.Build.targets (currently lives in time)
  • AppendTargetFrameworkToOutputPath, AppendRuntimeIdentifierToOutputPath and WarningsAsErrors are set by Directory.Build.props
    • this is to stop the /win/x64 folders from being generated
  • Copy 3rdParty to output is done via the Directory.Build.targets
    • this is done since the Choose/When directives don't seem to work when running the builds via cake/msbuild (they work ok with visual studio 2017/2019)
  • Compile Remove="file.cs" should be deleted and the "file.cs" should be deleted from the git repo as well.
  • For projects containing WPF or WinForms the SDK should be changed from "Microsoft.NET.Sdk" to "MSBuild.Sdk.Extras/1.6.68" (from https://www.nuget.org/packages/MSBuild.Sdk.Extras) and the following changes made:
    • Add <ExtrasEnableWpfProjectSetup>true</ExtrasEnableWpfProjectSetup> for WPF
    • Add <ExtrasEnableWinFormsProjectSetup>true</ExtrasEnableWinFormsProjectSetup> for WinForms
    • EmbeddedResource for ".resx" files and the associated Compile of ".designer.resx" files should be removed
    • Compile of ".cs" UserControl, Form and Component files and associated ".designer.cs" files should be removed
    • Compile of ".xaml.cs" files and associated ".xaml" Page should be removed
  • Add entries using wildcards for resources if they exist similar to the following:

    Code Block
    languagexml
      <ItemGroup>
        <EmbeddedResource Include="Persistence\Mappings\*.hbm.xml" />
        <EmbeddedResource Include="Persistence\SchemaUpgrades\*.sql" />
        <Resource Include="Resources\**\*">
          <Pack>True</Pack>
        </Resource>
      </ItemGroup>


    • Remove individual entries for resources

Example:

Expand
titleNew csproj example
Code Block
languagexml
linenumberstrue
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net48</TargetFramework>
    <LangVersion>7.3</LangVersion>
    <NoWarn>1591,1587</NoWarn>
    <RootPath>$(MSBuildThisFileDirectory)..\..\</RootPath>
    <AssemblySearchPaths>$(RootPath)3rdParty;$(AssemblySearchPaths);</AssemblySearchPaths>
    <OutputPath>$(RootPath)Output</OutputPath>
    <AssemblyTitle>TIME.RainfallRunoff</AssemblyTitle>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <FileAlignment>4096</FileAlignment>
    <NoWarn>1591,1587</NoWarn>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
    <OutputPath>$(RootPath)Output</OutputPath>
    <BaseAddress>285212672</BaseAddress>
  </PropertyGroup>
  <Import Project="$(RootPath)TIME\Solutions\IncludeGlobalAssembly.targets" />
  <Import Project="$(RootPath)RiverSystem\Solutions\NormalisePdbBuildRoot.targets" />
  <ItemGroup>
    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Validation">
      <Private>True</Private>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    <Reference Include="System.ComponentModel.DataAnnotations">
      <Private>False</Private>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\TIME\TIME.csproj" />
    <ProjectReference Include="..\TIME.Tools\TIME.Tools.csproj" />
  </ItemGroup>
  <ItemGroup>
    <None Include="AWRA\AWRA.cd" />
  </ItemGroup>
</Project>

...

  1. Easiest way to install this is via dotnet cli tooling:
    1. dotnet tool install -g Project2015To2017.Migrate2017.Tool\
  2. Then to run the conversion:
    1. dotnet migrate-2017 wizard old-output-path  C:\src\rm3\riversystem\Solutions\<solution>.sln
  3. Tidy up using regex:
    1.  <ReferencePath>$(RootPath)3rdParty</ReferencePath><AssemblySearchPaths>$(RootPath)3rdParty;$(AssemblySearchPaths);</AssemblySearchPaths>

  4. Update to using correct ImportProjects (e.g. use the new imports from TIME rather than riversystem since they work with the new sdk format)
  5. Make additional changes as outlined in Notes above.