gpt4 book ai didi

c# - 在构建时或运行时获取解决方案路径

转载 作者:行者123 更新时间:2023-11-30 20:37:53 25 4
gpt4 key购买 nike

我有一个 C# 解决方案,我希望在构建期间将解决方案的路径设置为 app.config。例如。假设我有解决方案 c:\temp\visual studio\super fun project\super_fun_project.sln打开。我构建并在其中一个测试项目中将应用程序设置更改为解决方案的完整路径。即

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="fullSolutionPath" value="{setAtBuild}"/>
</appSettings>
</configuration>

如果我去 c:\temp\visual studio\super fun project\Foobar.Tests\bin\Debug\Foobar.Tests.dll.config看起来是

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="fullSolutionPath" value="c:\temp\visual studio\super fun project\super_fun_project.sln"/>
</appSettings>
</configuration>

或者它需要格式化,这样当我在运行时询问值时,我确实得到了正确的路径。我查看了 Transformation,但我不知道如何设置解决方案路径。还有其他技巧吗?

最佳答案

您可以做的是修改项目文件并添加一个MsBuild Target。 .

目标可以使用 Custom Inline Task ,其源代码集成到项目文件中的任务。

所以要添加这个任务:

1) 卸载项目(右击项目节点,选择“卸载项目”)

2) 编辑项目文件(右击项目节点,选择“编辑”)

3) 将以下内容添加到项目文件中(例如到末尾)并重新加载它,现在当您构建时,配置文件将相应地进行修改。

<Project ...>
...
<Target Name="AfterBuild">
<RegexReplace FilePath="$(TargetDir)$(TargetFileName).config" Input="setAtBuild" Output="$(SolutionPath)" />
</Target>
<UsingTask TaskName="RegexReplace" TaskFactory="CodeTaskFactory" AssemblyName="Microsoft.Build.Tasks.Core" >
<ParameterGroup>
<FilePath Required="true" />
<Input Required="true" />
<Output Required="true" />
</ParameterGroup>
<Task>
<Using Namespace="System.Text.RegularExpressions"/>
<Code Type="Fragment" Language="cs"><![CDATA[
File.WriteAllText(FilePath, Regex.Replace(File.ReadAllText(FilePath), Input, Output));
]]></Code>
</Task>
</UsingTask>
</Project>

在这里,我将输出定义为使用 Visual Studio 的 MSBuild Property命名为 SolutionPath,但您可以重用此 RegexReplace 任务并根据各种需要更新 InputOutput 参数。

关于c# - 在构建时或运行时获取解决方案路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665193/

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