1"use strict";(self.webpackChunkstryker_mutator_github_io=self.webpackChunkstryker_mutator_github_io||[]).push([["260"],{96471:function(e,t,r){r.r(t),r.d(t,{metadata:function(){return d},default:function(){return a},frontMatter:function(){return s},contentTitle:function(){return l},toc:function(){return h},assets:function(){return o}});var d=JSON.parse('{"id":"stryker-net/migration-guide","title":"Migration guide","description":"This guide instructs how to update major versions of Stryker.NET.","source":"@site/docs/stryker-net/migration-guide.md","sourceDirName":"stryker-net","slug":"/stryker-net/migration-guide","permalink":"/docs/stryker-net/migration-guide","draft":false,"unlisted":false,"editUrl":"https://github.com/stryker-mutator/stryker-net/edit/master/docs/migration-guide.md","tags":[],"version":"current","sidebarPosition":90,"frontMatter":{"title":"Migration guide","sidebar_position":90,"custom_edit_url":"https://github.com/stryker-mutator/stryker-net/edit/master/docs/migration-guide.md"},"sidebar":"docs","previous":{"title":"Updating","permalink":"/docs/stryker-net/updating"},"next":{"title":"Introduction","permalink":"/docs/stryker-net/technical-reference/introduction"}}'),n=r(91987),i=r(67008);let s={title:"Migration guide",sidebar_position:90,custom_edit_url:"https://github.com/stryker-mutator/stryker-net/edit/master/docs/migration-guide.md"},l="Migration guide",o={},h=[{value:"V4.x --> V5.x",id:"v4x----v5x",level:2},{value:"\u23ED Updated runtime",id:"-updated-runtime",level:3},{value:"V3.x --> V4.x",id:"v3x----v4x",level:2},{value:"\u23ED Updated runtime",id:"-updated-runtime-1",level:3},{value:"V2.x --> V3.x",id:"v2x----v3x",level:2},{value:"\u{1F4CC} Baseline",id:"pushpin-baseline",level:3},{value:"V1.x --> V2.x",id:"v1x----v2x",level:2},{value:"\u23ED Updated runtime",id:"-updated-runtime-2",level:3},{value:"V0.x --> V1.x",id:"v0x----v1x",level:2},{value:"\u23ED Updated runtime",id:"-updated-runtime-3",level:3},{value:"\u23ED Options rework",id:"-options-rework",level:3},{value:"Multi value options",id:"multi-value-options",level:4},{value:"Options migration guide",id:"options-migration-guide",level:4}];function c(e){let t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"migration-guide",children:"Migration guide"})}),"\n",(0,n.jsx)(t.p,{children:"This guide instructs how to update major versions of Stryker.NET."}),"\n",(0,n.jsx)(t.h2,{id:"v4x----v5x",children:"V4.x --\x3e V5.x"}),"\n",(0,n.jsx)(t.h3,{id:"-updated-runtime",children:"\u23ED Updated runtime"}),"\n",(0,n.jsx)(t.p,{children:"The .NET runtime requirement for Stryker.NET has been changed. Dotnet 10 runtime is now required."}),"\n",(0,n.jsxs)(t.p,{children:["Please ",(0,n.jsx)(t.a,{href:"https://dotnet.microsoft.com/en-us/download/dotnet/10.0",children:"download and install the dotnet 10 runtime"})," and update your pipeline to have the dotnet 10 runtime available."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Note it is not neccesary to target dotnet 10 in your projects. Dotnet 10 is a runtime requirement for stryker, we will still compile your project to your existing target frameworks."})}),"\n",(0,n.jsx)(t.h2,{id:"v3x----v4x",children:"V3.x --\x3e V4.x"}),"\n",(0,n.jsx)(t.h3,{id:"-updated-runtime-1",children:"\u23ED Updated runtime"}),"\n",(0,n.jsx)(t.p,{children:"The .NET runtime requirement for Stryker.NET has been changed. Dotnet 8 runtime is now required."}),"\n",(0,n.jsxs)(t.p,{children:["Please ",(0,n.jsx)(t.a,{href:"https://dotnet.microsoft.com/en-us/download/dotnet/8.0",children:"download and install the dotnet 8 runtime"})," and update your pipeline have the dotnet 8 runtime available."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Note it is not neccesary to target dotnet 8 in your projects. Dotnet 8 is a runtime requirement for stryker, we will still compile your project to your existing target frameworks."})}),"\n",(0,n.jsx)(t.h2,{id:"v2x----v3x",children:"V2.x --\x3e V3.x"}),"\n",(0,n.jsxs)(t.h3,{id:"pushpin-baseline",children:["\u{1F4CC}"," Baseline"]}),"\n",(0,n.jsxs)(t.p,{children:["The allowed format of the ",(0,n.jsx)(t.a,{href:"/docs/stryker-net/configuration#azure-fileshare-sas-string",children:"azure-fileshare-sas"})," option has changed. SAS must contain ",(0,n.jsx)(t.code,{children:"sv="})," and ",(0,n.jsx)(t.code,{children:"sig="})," to be valid. SAS without sv= are no longer transformed to valid SAS. If you supply stryker with an azure fileshare sas that does not include ",(0,n.jsx)(t.code,{children:"sv="})," or ",(0,n.jsx)(t.code,{children:"sig="})," you will have to update your azure-fileshare-sas."]}),"\n",(0,n.jsx)(t.h2,{id:"v1x----v2x",children:"V1.x --\x3e V2.x"}),"\n",(0,n.jsx)(t.h3,{id:"-updated-runtime-2",children:"\u23ED Updated runtime"}),"\n",(0,n.jsx)(t.p,{children:"The .NET runtime requirement for Stryker.NET has been updated from dotnet 5.0 to dotnet 6.0 LTS."}),"\n",(0,n.jsxs)(t.p,{children:["Please ",(0,n.jsx)(t.a,{href:"https://dotnet.microsoft.com/download/dotnet/6.0",children:"download and install the dotnet 6 runtime"})," and update your pipeline have the dotnet 6 runtime available."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Note that you do not have to update your application to target dotnet 6. Dotnet 6 is only a runtime requirement for stryker to be able to run on your system."})}),"\n",(0,n.jsx)(t.h2,{id:"v0x----v1x",children:"V0.x --\x3e V1.x"}),"\n",(0,n.jsx)(t.h3,{id:"-updated-runtime-3",children:"\u23ED Updated runtime"}),"\n",(0,n.jsx)(t.p,{children:"The .NET runtime requirement for Stryker.NET has been updated from 3.1 to 5.0."}),"\n",(0,n.jsxs)(t.p,{children:["Please ",(0,n.jsx)(t.a,{href:"https://dotnet.microsoft.com/download/dotnet/5.0",children:"download and install the dotnet 5 runtime"})," and update your pipeline have the dotnet 5 runtime available."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Note that you do not have to update your application to use dotnet 5. Dotnet 5 is only a runtime requirement for stryker to be able to run on your system."})}),"\n",(0,n.jsx)(t.h3,{id:"-options-rework",children:"\u23ED Options rework"}),"\n",(0,n.jsx)(t.p,{children:"Almost all options have been renamed or work different. A fundamental difference on the CLI is how multi value options are passed."}),"\n",(0,n.jsx)(t.h4,{id:"multi-value-options",children:"Multi value options"}),"\n",(0,n.jsx)(t.p,{children:"The old annotation for passing multi value options was confusing and not based on any standards. For example this is how multiple reporters were passed \u{1F44E}"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"dotnet stryker --reporters \"['html', 'progress']\"\n"})}),"\n",(0,n.jsx)(t.p,{children:"This now looks like \u{1F44D}"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:'dotnet stryker --reporter "html" --reporter "progress"\n'})}),"\n",(0,n.jsx)(t.h4,{id:"options-migration-guide",children:"Options migration guide"}),"\n",(0,n.jsx)(t.p,{children:"A lot of options have been renamed. We have also decided that some options either do not belong on the commandline or don't belong in the configuration file. For example an API key should not be stored in the configuration file so that possibility has been removed."}),"\n",(0,n.jsx)(t.p,{children:"Options migration overview:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Old cli"}),(0,n.jsx)(t.th,{children:"New cli"}),(0,n.jsx)(t.th,{children:"Old json"}),(0,n.jsx)(t.th,{children:"New json"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"config-file-path"}),(0,n.jsx)(t.td,{children:"f | config-file"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"max-concurrent-testrunners"}),(0,n.jsx)(t.td,{children:"c | concurrency"}),(0,n.jsx)(t.td,{children:"max-concurrent-testrunners"}),(0,n.jsx)(t.td,{children:"concurrency"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dev-mode"}),(0,n.jsx)(t.td,{children:"dev-mode"}),(0,n.jsx)(t.td,{children:"dev-mode"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"solution-path"}),(0,n.jsx)(t.td,{children:"s | solution"}),(0,n.jsx)(t.td,{children:"solution-path"}),(0,n.jsx)(t.td,{children:"solution"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"log-file"}),(0,n.jsx)(t.td,{children:"L | log-to-file"}),(0,n.jsx)(t.td,{children:"log-file"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"log-level"}),(0,n.jsx)(t.td,{children:"V | verbosity"}),(0,n.jsx)(t.td,{children:"log-level"}),(0,n.jsx)(t.td,{children:"verbosity"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"mutation-level"}),(0,n.jsx)(t.td,{children:"l | mutation-level"}),(0,n.jsx)(t.td,{children:"mutation-level"}),(0,n.jsx)(t.td,{children:"mutation-level"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"threshold-high"}),(0,n.jsx)(t.td,{children:"threshold-high"}),(0,n.jsx)(t.td,{children:"thresholds.high"}),(0,n.jsx)(t.td,{children:"thresholds.high"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"threshold-low"}),(0,n.jsx)(t.td,{children:"threshold-low"}),(0,n.jsx)(t.td,{children:"thresholds.low"}),(0,n.jsx)(t.td,{children:"thresholds.low"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"threshold-break"}),(0,n.jsx)(t.td,{children:"b | break-at"}),(0,n.jsx)(t.td,{children:"thresholds.break"}),(0,n.jsx)(t.td,{children:"thresholds.break"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"reporters"}),(0,n.jsx)(t.td,{children:"r | reporter (flag allowed multiple times)"}),(0,n.jsx)(t.td,{children:"reporters"}),(0,n.jsx)(t.td,{children:"reporters"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"project-file"}),(0,n.jsx)(t.td,{children:"p | project"}),(0,n.jsx)(t.td,{children:"project-file"}),(0,n.jsx)(t.td,{children:"project"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"diff"}),(0,n.jsx)(t.td,{children:"since"}),(0,n.jsx)(t.td,{children:"diff"}),(0,n.jsx)(t.td,{children:"since"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"timeout-ms"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"timeout-ms"}),(0,n.jsx)(t.td,{children:"additional-timeout"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"excluded-mutations"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"excluded-mutations"}),(0,n.jsx)(t.td,{children:"ignore-mutations"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ignore-methods"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"ignore-methods"}),(0,n.jsx)(t.td,{children:"ignore-methods"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"mutate"}),(0,n.jsx)(t.td,{children:"m | mutate"}),(0,n.jsx)(t.td,{children:"mutate"}),(0,n.jsx)(t.td,{children:"mutate"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"language-version"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"language-version"}),(0,n.jsx)(t.td,{children:"language-version"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"coverage-analysis"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"coverage-analysis"}),(0,n.jsx)(t.td,{children:"coverage-analysis"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"abort-test-on-fail"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"abort-test-on-fail"}),(0,n.jsx)(t.td,{children:"disable-bail"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"disable-testing-mix-mutations"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"disable-testing-mix-mutations"}),(0,n.jsx)(t.td,{children:"disable-mix-mutants"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"test-projects"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"test-projects"}),(0,n.jsx)(t.td,{children:"test-projects"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dashboard-url"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"dashboard-url"}),(0,n.jsx)(t.td,{children:"dashboard-url"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dashboard-api-key"}),(0,n.jsx)(t.td,{children:"dashboard-api-key"}),(0,n.jsx)(t.td,{children:"dashboard-api-key"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"project-name"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"dashboard-project"}),(0,n.jsx)(t.td,{children:"project-info.name"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"module-name"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"dashboard-module"}),(0,n.jsx)(t.td,{children:"project-info.module"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dashboard-version"}),(0,n.jsx)(t.td,{children:"v | version"}),(0,n.jsx)(t.td,{children:"dashboard-version"}),(0,n.jsx)(t.td,{children:"project-info.version"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"diff-ignore-files"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"diff-ignore-files"}),(0,n.jsx)(t.td,{children:"since.ignore-changes-in"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"azure-storage-url"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"azure-storage-url"}),(0,n.jsx)(t.td,{children:"baseline.azure-fileshare-url"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dashboard-fallback-version"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"dashboard-fallback-version"}),(0,n.jsx)(t.td,{children:"baseline.fallback-version"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"baseline-storage-location"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"baseline-storage-location"}),(0,n.jsx)(t.td,{children:"baseline.provider"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dashboard-compare"}),(0,n.jsx)(t.td,{children:"with-baseline"}),(0,n.jsx)(t.td,{children:"dashboard-compare"}),(0,n.jsx)(t.td,{children:"baseline"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"git-diff-target"}),(0,n.jsx)(t.td,{children:"since"}),(0,n.jsx)(t.td,{children:"git-diff-target"}),(0,n.jsx)(t.td,{children:"since.target"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"azure-storage-sas"}),(0,n.jsx)(t.td,{children:"azure-fileshare-sas"}),(0,n.jsx)(t.td,{children:"azure-storage-sas"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"files-to-exclude"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"files-to-exclude"}),(0,n.jsx)(t.td,{children:"\u274C"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"test-runner"}),(0,n.jsx)(t.td,{children:"\u274C"}),(0,n.jsx)(t.td,{children:"test-runner"}),(0,n.jsx)(t.td,{children:"\u274C"})]})]})]})]})}function a(e={}){let{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},67008:function(e,t,r){r.d(t,{R:function(){return s},x:function(){return l}});var d=r(71763);let n={},i=d.createContext(n);function s(e){let t=d.useContext(i);return d.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),d.createElement(i.Provider,{value:t},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.