gpt4 book ai didi

.net - 有一个 sln 文件,可以列出该 sln 下所有项目的所有文件吗?

转载 作者:行者123 更新时间:2023-12-04 21:03:30 27 4
gpt4 key购买 nike

是否有执行以下操作的方法或扩展:

拥有 *.sln文件,我可以列出该 sln 下所有项目或所有解决方案文件夹中的所有文件吗?

所以如果我这样做 dotnet sln list然后我从该解决方案文件中获取项目列表,但我需要的是获取所有文件。

我真正的需要是将所有这些文件复制到不同的文件夹中。

最佳答案

这是一个基于 msbuild 的解决方案,它实际上相当简单且非侵入性。
在解决方案目录中创建一个文件 CopySource.targets 例如,内容:

<Project>
<Target Name="CopySourcesUsed" AfterTargets="AfterCompile">
<PropertyGroup>
<DestinationDirectory>c:\temp\dest\</DestinationDirectory>
<SourceDirectory>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))</SourceDirectory>
</PropertyGroup>
<ItemGroup>
<CompileSources Condition="!$([System.Text.RegularExpressions.Regex]::IsMatch('%(Identity)', `.*Assembly(Attributes|Info)\.cs`))" Include="@(Compile)"/>
<AllSources Include="@(CompileSources);@(EmbeddedResource);$(MSBuildProjectFile)" />
<AllSources>
<Dest>$([System.String]::new('%(FullPath)').Replace($(SourceDirectory), $(DestinationDirectory)))</Dest>
</AllSources>
</ItemGroup>
<Message Importance="High" Text="%(AllSources.FullPath) -> %(AllSources.Dest)"/>
<Copy SourceFiles="@(AllSources)" DestinationFiles="@(AllSources->'%(Dest)')" />
</Target>
</Project>

然后运行一个构建
dotnet msbuild mysolution.sln /p:CustomAfterMicrosoftCSharpTargets=/path/to/CopySource.targets

(注意 dotnet build 也适用于我,但可能不适用于旧版本,不知道)

这将在每个项目文件中导入 ListSources.Targets 并在编译后运行 CopySourcesUsed 目标。在某个地方编译之前也可以工作,但是你必须弄清楚什么时候:编译之后所有的项目肯定都已经收集好了。例如,AllSources 项填充了编译源文件和嵌入的资源。如您所见,编译项被过滤以排除生成的 AssemblyAttributes/AssemblyInfo 文件,因为您可能不想要这些文件。另一种方法可能是在添加这些文件之前运行此目标,但同样:这更棘手。可能还有其他要复制的内容(xaml/config/...),在这种情况下,您必须确定要包含的项目的名称。首先检查它是否没有简单地列在 csproj 中。否则,以诊断详细程度运行构建可以告诉您名称: dotnet msbuild mysolution.sln /v:diag .

除了在命令行中注入(inject)此逻辑,您还可以在您拥有的每个项目中导入文件,或者使用另一个扩展点,例如通过将其放在某个 ImportAfter 目录中使其在系统范围内,所有这些解决方案都可以在 SO 上找到。

关于.net - 有一个 sln 文件,可以列出该 sln 下所有项目的所有文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com