Visual Studio 从MSBuild读取launchSettings.json值?

olmpazwi  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(147)

我有时会在Visual Studio中远程调试我的项目,它在launchSettings.json中启用和配置。
我有一个MSBuild任务,用于在生成期间自动将项目输出复制到远程计算机。
但是,我目前需要手动启用/禁用(因为复制需要一些时间,如果我不是远程调试,则会浪费一些时间)并配置(使用正确的远程主机名)MSBuild任务,即使这些信息已经在launchSettings.json中。
是否有方法从launchSettings.json读取值(至少remoteDebugEnabledremoteDebugMachine)作为MSBuild任务的一部分?

5f0d552i

5f0d552i1#

从理论上讲,Inline Task应该能够实现你的想法,它允许我们在.csproj文件内部编写代码。但实际测试的时候,在构建的时候,我无法获取第三方库的数据,甚至是一些本地库的数据。
Inline Task,你可以在你这边测试一下,因为我这边VS工具和它的环境有问题,也许在你这边可以实现。
不管怎样,我找到了另一种方法。

1、创建一个名为ReadLaunchSettings的控制台应用:

using System;
using System.IO;
using System.Linq;
using System.Text.Json;

namespace ReadLaunchSettings
{
    class Program
    {
        static void Main(string[] args)
        {
            var launchSettingsFilePath = args[0];
            var json = File.ReadAllText(launchSettingsFilePath);
            var jdoc = JsonDocument.Parse(json);

            var profiles = jdoc.RootElement.GetProperty("profiles");
            var profile = profiles.EnumerateObject()
                                  .FirstOrDefault(p => p.Value.GetProperty("remoteDebugEnabled").GetBoolean());

            if (profile.Value.ValueKind != JsonValueKind.Undefined)
            {
                Console.WriteLine("true");
                Console.WriteLine(profile.Value.GetProperty("remoteDebugMachine").GetString());
            }
            else
            {
                Console.WriteLine("false");
                Console.WriteLine("null");
            }
        }
    }
}

字符串

2、构建上述控制台应用程序,获取可执行的应用程序(.exe文件)


的数据

3、修改有launchSettings.json文件的项目的.csproj文件内容(我这边是web应用):

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>

    <Target Name="TestBowman" BeforeTargets="PreBuildEvent">
        <Exec Command="C:\Users\Administrator\source\repos\projectsref\ReadLaunchSettings\bin\Debug\net6.0\ReadLaunchSettings.exe $(ProjectDir)Properties\launchSettings.json" ConsoleToMSBuild="true">
            <Output TaskParameter="ConsoleOutput" PropertyName="ConsoleOutput" />
        </Exec>

        <PropertyGroup>
            <RemoteDebugEnabled>$(ConsoleOutput.Split(';')[0])</RemoteDebugEnabled>
            <RemoteDebugMachine>$(ConsoleOutput.Split(';')[1])</RemoteDebugMachine>
        </PropertyGroup>

        <Message Text="RemoteDebugEnabled: $(RemoteDebugEnabled)" />
        <Message Text="RemoteDebugMachine: $(RemoteDebugMachine)" />
    </Target>

</Project>


经过上述步骤,如果我构建了这个项目,我将获得您想要的信息:


相关问题