NF.Tool.ReleaseNoteMaker
์์ํ๋ฉฐ
- ํ์คํ ๋ฆฌ์์ ๋ฝ๋๊ฑด ๋ณ๋ก
- ADR๊ฐ์ ๋๊ตฌ๊ฐ ์์ผ๋ฉด ์ข๊ฒ ๋ค.
- towncrier์ ์ฐพ์๋ค.
๊ธฐ๋ก
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฐ์
-
AnsiConsole
- public override string StackTrace { get; } ์๋จนํ๋๊ฒ.
- ์ด์๋ฅผ ์ผ๋จ ๋จ๊น - https://github.com/spectreconsole/spectre.console/issues/1692
- stderr AnsiConsole ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ณ
- MultiSelectionPrompt ํด์ ํค๋ฅผ ์
๋ ฅ๋ฐ์ ์บ์ฌ ๋ฃ๊ณ ์ถ์๋๋ฐ ์บ์ฌ์ด ์๋ค?
- Select๋ ์๋๋ฐ SelectAll/DeselectAll์ด ์๋ค
- https://github.com/spectreconsole/spectre.console/discussions/700
- ์ต๋๊ธธ์ด
- AnsiConsole.Profile.Width = 255;
- public override string StackTrace { get; } ์๋จนํ๋๊ฒ.
-
Tomlyn ์ฌ์ฉ๋ฒ
- array๋ฅผ ํค๋ฅผ ์ง์ ํด์ dic์ผ๋ก ๋ฃ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ข์๊ฒ๊ฐ์๋ฐโฆ
-
์งํฉ์ฐ์ฐ ๊น๋จน๋ค
- https://learn.microsoft.com/en-us/dotnet/csharp/linq/standard-query-operators/set-operations
- ํ๋ก ์ ๋ฆฌํ๋ค๊ฐ ๊ทธ๋ฅ ๊ทธ๋๊ทธ๋ ๊ฒ์ํ์. ๋์ค์ ํ์ํ๋ฉด ๋ค์ ํ๋ก์ ๋ฆฌ.
-
public void Deconstruct(out string fname, out string lname)
-
๊ตฌ์กฐ์ฒด ์์ฑ์ ๋ฐฉ์ง
- public ObsoleteAttribute(string? message, bool error)
- throw new InvalidOperationException
- public ObsoleteAttribute(string? message, bool error)
๋ ๋ํ ํ๋ฆฟ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ
visual studio์์ ๋๋ฒ๊น ์ด ๋๋๊ฑฐ์ ๊ฐ์ค์น๋ฅผ ๋ง์ด ์ค.
- t4
- ๋๋ฒ๊น ๊ฐ๋ฅํ๊ฑธ๋ก
- mono t4 ๋๋ฒ๊น ๊ฝค ๊ด์ฐฎ๋ค, ๊ทผ๋ฐ string๋๊ธฐ๋๊ฒ ์๋๋ผ filepath๋ผ ์ฐ์ฐ
- razor
- ์์ง ๊ด๋ฆฌ๊ฐ ๋์ง ์๋๋ฏ : https://github.com/adoconnection/RazorEngineCore/pull/148
- razor๋ก๋ template๋ง๋ค์ด ๋ดค๋๋ฐ ์์ธ๋ก t4๋ณด๋ค ๊ฐ์์ฑ์ด ์์ข์๋ค.
- liquid
- towncrier๋ Jinja2
- ์ผ๋จ liquid๋ฅผ ๋ฃ๊ธด ๋ฃ์๋๋ฐ t4๊ฐ ๋ ๋์๋ณด์ฌ์ ์ญ์ ํ ๊น ๋ณด๋ฅ์ค => ํน์๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฐ๋ฉด ๋์ดํค๊ธฐ ํ๋๋ ๋น ๋ฅธ ์ญ์ ๋ก ๊ฒฐ์ .
- fluid / scriban / dotliquid
- dotliquid๋ Drop๋ง๋๋๊ฒ ๊ท์ฐฎ์์ ํจ์ค
- https://github.com/microsoft/semantic-kernel/issues/6233 ์์ scriban๋์ fluid์ฐ๋๊ฑฐ๋ณด๊ณ fluid๋ก ์ ํ
- liquid๋ฅผ ์ง์ํ์ผ๋ whitespace๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ณ fluid์์ class์ methodํธ์ถ์ด ์๋์๋ค.
- ์๋์ {%- assign categoryIssues = category.GetAllIssues() -%}
- ์ด๋ ๊ฒ ํจ {%- assign categoryIssues = category.CategoryIssues -%}
๋ค์ด๋ฐ
-
towncrier
- ๋ค์ด๋๋ฏน ์ธ์ด ํ์ ๋ฐ ๋ค์ด๋ฐ ๋ฌธ์ - ์ ์ชฝ ์ธ์ ๋ค์ด๋ฐ ์ผ์ค ๋ง์ ์๋ฌ.
-
PatchNoteMaker ํ๋๋ฐโฆ ReleaseNoteMaker ๋ ์๋๋ฐโฆ
- PatchNoteMakerํ๋ค๊ฐ ์ต์ข ์ ์ผ๋ก ReleaseNoteMaker๋ก ๊ฒฐ์ .
๊ธฐํ
-
assemblyLocation empty
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>- ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ฝํ ์ธ ํ์ผ(์: DLL, ๊ตฌ์ฑ ํ์ผ, ๋ฆฌ์์ค ํ์ผ ๋ฑ)์ด ์คํ ํ์ผ ๋ด์ ํฌํจ๋์ด ์คํ ํ์ผ์ ์คํํ๋ฉด ์๋์ผ๋ก ์ถ์ถ๋๊ณ ์คํ๋ฉ๋๋ค.
- https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file/overview?tabs=cli
-
line ending ๋ฌธ์
-
TestInitialize/TestCleanup/DeploymentItem/TestMethod
- DeploymentItem๋ค์ด TestInitialize๋ณด๋ค ๋จผ์ ์คํ๋๋๋ฐ ๋ง์ TestContext.DeploymentDirectory๋ ๋์ผํด์ ํ์ผ์กฐ์ ํ ์คํธ๋ ์ค์๋์ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์๊น.
- public required TestContext TestContext { get; set; } ๋ก ๊ฐ์ ธ์์ ์์์ ํด๋์ด๋.
-
docfx
[!INCLUDE [<title>](<filepath>)][!code-<language>[](<filepath><query-options>)]mermaid- NOTE / TIP / IMPORTANT / CAUTION / WARNING
> [!NOTE]
> Information the user should notice even if skimming.
- pack ์ define flag๋ฅผ ์ ์ ์๋ค..
- reno๋ผ๋ ๊ฒ๋ ์๋ค?
.tt vs .t4
- ํ์ฅ์๋ฅผ .tt๋ก ํ๋ค๊ฐ t4๋ก ํ๋ค๊ฐ ๋ค์ tt๋ก.
- ์ฒ์์ ์ฐพ์๋ดค์๋ t4 template๊ฐ ์ด๊ฐ์ ๊ฐ๊ฒจ ์ฐพ์๋ดค๋ค๊ฐ .tt๊ฐ ๋ง์ด ์ฐ์ธ๋ค๋ ์ฌ์ค์ ์๊ณ .tt๋ก ๊ฒฐ์
- ํ์ ๊น๋จน์ด์ ์ .tt์ผ๋ผ๊ณ ์๊ฐํ๊ณ t4๊ฐ ๋ง์ ๋ค์ด์ .t4๋ก ๋ณ๊ฒฝ
- ํ์ ๋ ๋ญ๊ฐ ์ํด์ ๋ค์ ์ฐพ์๋ณด๊ณ .tt๋ก ๋กค๋ฐฑ
์ก๋คํ
- filename => fileName
- https://stackoverflow.com/questions/159017/named-string-formatting-in-c-sharp
- python textwrap
- https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-11.0/raw-string-literal
- ๋ฌ์คํธ๋ก ์์ฑ๋ ๊ฒ๋ ์๋ค?
- https://github.com/nekitdev/changelogging
- draft๋์ preview๋ผ๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ์๊ฑด ์ข์๋ฏ. https://docs.rs/changelogging/latest/changelogging/#preview
- https://github.com/nekitdev/changelogging
- https://github.com/twisted/towncrier
- https://devguide.python.org/core-team/committing/index.html#what-s-new-and-news-entries
- https://docs.gitlab.com/development/changelog/
- https://github.com/miniscruff/changie