Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Set default TFM for Traversal to SDK version - #610

Open
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm
Open

Set default TFM for Traversal to SDK version#610
Matt Kotsenas (MattKotsenas) wants to merge 3 commits into
microsoft:mainfrom
MattKotsenas:feature/traversal-default-tfm

Conversation

@MattKotsenas

@MattKotsenasMatt Kotsenas (MattKotsenas) commented Mar 9, 2025

Copy link
Copy Markdown
Member

Fixes#602.

Defaulting to net45 feels odd, as it means folks are taking new dependencies on .NET Framework without realizing it. It can also lead to oddities like #602 where old defaults unexpectedly apply to newer projects.

This change allows the user to specify a particular version as before. Otherwise $(NETCoreAppMaximumVersion) becomes the default version.

I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the SDK / build system get a more sensible default than a version released 13 years ago.

Fixesmicrosoft#602.
Defaulting to `net45` feels odd, as it means folks are taking _new_ dependencies on .NET Framework without realizing it. It can also lead to oddities like microsoft#602 where old defaults apply to newer projects.
This change allows the user to specify a particular version as before. However, otherwise `$(NETCoreAppMaximumVersion)` becomes the default version.
I think this strikes a better balance, where users that care or need a specific version continue to do so, while those that consider Traversal projects more a facility of the build system get a more modern default.
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

As someone that's helping teams adopt traversal projects across an assortment of repos, this is something that comes up way more often than you might expect. The TFM shows up in binlogs and NuGet lock files, and devs often mistakenly think traversal projects are old or not well supported.

baronfel
Chet Husk (baronfel) previously approved these changes Mar 9, 2025
Comment threadsrc/Traversal/Sdk/Traversal.targets Outdated
Comment threadsrc/Traversal/Sdk/Traversal.targets
@MattKotsenas

Copy link
Copy Markdown
MemberAuthor

/cc Andy Gerlicher (@AndyGerlicher) for review, please. Thanks!

not set, fallback to the SDK's old default of .NET Framework v4.5.
-->
<TargetFramework Condition="'$(TargetFramework)' == ''">net45</TargetFramework>
<TargetFramework Condition=" '$(TargetFramework)' == '' And '$(NETCoreAppMaximumVersion)' != ''">net$(NETCoreAppMaximumVersion)</TargetFramework>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like netstandard1.0 ?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be an improvement over net45, but it doesn't fix the linked bug.

Targeting old netstandard means we're still opt-ed out of modern defaults like defaulting to Release for publish and pack.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative would be to find a solution for the project templates. Then we could default to the current SDK version in the template.

I also prefer that option a bit less since it means every Traversal would set the TFM which clutters things a bit, but it'd be less magical.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish on a Traversal target uses Debug configuration instead of Release by default

4 participants

@MattKotsenas@baronfel@AndyGerlicher@jeffkl