Visual Studio hints
Себе для памяти, возможно дополню и поправлю
Для “сопутствующих” сборок
например собрал ты в конце года сборку пересобрал после нового года, не поменял мажор минор…. лисп посчитает, что она старая???
предлагаю так….
как ты всегда учил надо минимизировать дублирование кода (относится и к свойствам проектов), для этого в нашем случае отлично подходит Directory.Build.props
кидаем его в корень каталога решения и прописываем в нем общие параметры для всех сборок
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<Project>
<!-- <Import Project="d:\@Developers\Programmers\!NET\Shared\Directory.Build\Directory.Build.props"/> -->
<PropertyGroup>
<!-- ***************** общие свойства всех решений ***************** -->
<!-- root решения относительно этого файла -->
<!--<RepoRoot>$(MSBuildThisFileDirectory)</RepoRoot>-->
<!-- root решения относительно каталога решения, более верно -->
<!--************* только при сборке из решения ******************-->
<RepoRoot>$(SolutionDir)</RepoRoot>
<!-- позволяет проекты размещать в одном каталоге -->
<!-- выходной каталог obj в каталоге решения -->
<BaseIntermediateOutputPath>$(RepoRoot)obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<LangVersion>latest</LangVersion>
<!--<DateTime -->
<StartYear>2014</StartYear>
<CurrentYear>$([System.DateTime]::Now.Year)</CurrentYear>
<!--<Version />-->
<!-- <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute> -->
<!--<Version />-->
<!-- путь к сборке -->
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<BaseOutputPath>..\bin\</BaseOutputPath>
<OutputPath>$(SolutionDir)bin\$(Configuration)</OutputPath>
<!-- *******************Description *************-->
<!-- ***************** Постоянные свойства ***************** -->
<!-- CompanyName -->
<Company>doctorRaz@gmail.com</Company>
<!-- LegalCopyright -->
<Copyright>Разыграев Андрей</Copyright>
<!-- LegalTrademarks -->
<Trademark>©doctorRaz $(StartYear)-$(CurrentYear)</Trademark>
<!-- ***************** Переопределяются в проекте ***************** -->
<!-- ProductName -->
<Product>$(SolutionName)</Product>
<!-- FileDescription он жэж Title-->
<!-- если все закоментить то в титул пойдет имя сборки -->
<!-- <AssemblyTitle>PlotSPDS</AssemblyTitle> -->
<!-- Comments -->
<!-- ProductVersion он жэж AssemblyInformationalVersion-->
<InformationalVersion>$(SolutionName) for nanoCAD</InformationalVersion>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<NeutralLanguage>ru-RU</NeutralLanguage>
<!-- ***************** ХЗ где используется ***************** -->
<!-- <PackageProjectUrl>http://doctorraz.blogspot.com/2022/10/PlotSPDS.NET.html</PackageProjectUrl> -->
<!-- <ProductVersion>ProductVersion</ProductVersion> -->
<!-- <AssemblyProductVersion>AssemblyProductVersion</AssemblyProductVersion> -->
<!-- <AssemblyInformationalVersionAttribute>AssemblyInformationalVersionAttribute</AssemblyInformationalVersionAttribute> -->
<!-- ***************** индивидуальные свойства решения *****************-->
<!-- с WPF аккуратно, теряет ресурсы если root другой, -->
<RootNamespace>drz.SpecSPDS</RootNamespace>
<Deterministic>false</Deterministic>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<AssemblyVersion>0.1.*</AssemblyVersion> <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<Description>Спецификация из универсального маркера, CAD + Multicad</Description>
<RepositoryUrl>https://github.com/doctorRaz/SpecSPDS</RepositoryUrl>
<MinVersion>23</MinVersion>
</PropertyGroup>
</Project>
эти строчки отвечают за номер сборки
1
2
3
4
<Deterministic>false</Deterministic>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<AssemblyVersion>0.1.*</AssemblyVersion>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
будет вида 0.1.9692.15284, для всех сборок проекта
если для какой то группы сборок нужен другой мажор минор, в каталоге этих сборок создаем Directory.Build.props и пишем там нужные цифры если нужны индивидуальные свойства, то прописываем их в проекте сборки, они переопределят заданные в корневом Directory.Build.props
по поводу сборок NET Framework я перевел их почти все на стиль SDK, типа так
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)Directory.Build.props" Condition="Exists('$(SolutionDir)Directory.Build.props')" />
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<RootNamespace>drz.Abstractions</RootNamespace>
<AssemblyName>$(SolutionName).$(MSBuildProjectName)</AssemblyName>
<InformationalVersion>$(MSBuildProjectName) for All</InformationalVersion>
<ImplicitUsings>disable</ImplicitUsings>
<Description>абстракции, интерфейсы</Description>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
</Project>
учитывая, что у тебя есть Directory.Build.props если хочешь другой номер версии, то просто добавь
1
<AssemblyVersion>10.21.*</AssemblyVersion>
по поводу текстового файла с номером версии для обновлятора
в корень решения кидаем Directory.Build.targets
там прописываем такие строчки
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<Target Name="WriteUpdateInfoINI" AfterTargets="Build">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
</GetAssemblyIdentity>
<WriteLinesToFile
File="$(TargetDir)update.ini"
Overwrite="false"
Lines="
[$(MSBuildProjectName)]
Name=$(AssemblyName)
Version=%(AssemblyInfo.Version)
"/>
<!--json-->
</Target>
<Target Name="WriteUpdateInfoJson" AfterTargets="Build">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
</GetAssemblyIdentity>
<PropertyGroup>
<Major>$([System.Version]::Parse('%(AssemblyInfo.Version)').Major)</Major>
<Minor>$([System.Version]::Parse('%(AssemblyInfo.Version)').Minor)</Minor>
<Build>$([System.Version]::Parse('%(AssemblyInfo.Version)').Build)</Build>
<Revision>$([System.Version]::Parse('%(AssemblyInfo.Version)').Revision)</Revision>
</PropertyGroup>
<WriteLinesToFile
File="$(TargetDir)update.json"
Overwrite="false"
Lines='{"Project":"$(AssemblyName)","Major":$(Major),"Minor":$(Minor),"Build":$(Build),"Revision":$(Revision)}' />
</Target>
формат любой, данные любые, тут только фантазией креатив ограничен
у меня все сборки идут в один каталог, поэтому по каждой идет дозапись в файл update.*.
единственное но… перед сборкой файл надо удалять руками или батником, как автоматизировать удаление перед общей сборкой мы с ботом пока не придумали