如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

https://blog.csdn.net/WPwalter/article/details/88384117

我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输出文件所在的位置。对于 .NET Core 所使用的新 csproj 格式来说,你可能会发现实际生成路径中带了 netcoreapp3.0 或者 net472 这样的子文件夹。

然而有时我们并不允许生成这样的子文件夹。本文将介绍可能影响实际输出路径的各种设置。

本文内容

        项目和输出路径
        影响输出路径的属性

项目和输出路径

对于这样的一个简单的项目文件,这个项目的实际输出路径可能是像下图那样的。

<Project>
  <ItemGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <OutputPath>bin\$(Configuration)</OutputPath>
  </ItemGroup>
</Project>

    1
    2
    3
    4
    5
    6

输出路径带有框架子文件夹

有没有办法可以不要生成这样的子文件夹呢?答案是可以的。

我在 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 一文中有说到如何解读 Microsoft.NET.Sdk,而我们的答案就是从解读这个 Sdk 而来。
影响输出路径的属性

OutputPath 属性由这些部分组成:

$(BaseOutputPath)\$(PlatformName)\$(Configuration)\$(RuntimeIdentifier)\$(TargetFramework.ToLowerInvariant())\

    1

如果以上所有属性都有值,那么生成的路径可能就像下面这样:

bin\x64\Debug\win7-x64\netcoreapp3.0

    1

具体的,这些属性以及其相关的设置有:

    $(BaseOutputPath) 默认值 bin\,你也可以修改。

    $(PlatformName) 默认值是 $(Platform),而 $(Platform) 的默认值是 AnyCPU;当这个值等于 AnyCPU 的时候,这个值就不会出现在路径中。

    $(Configuration) 默认值是 Debug。

    $(RuntimeIdentifier) 这个值和 $(PlatformTarget) 互为默认值,任何一个先设置都会影响另一个;此值即 x86、x64 等标识符。可以通过 $(AppendRuntimeIdentifierToOutputPath) 属性指定是否将此加入到输出路径中。

    $(TargetFramework) 这是在 csproj 文件中强制要求指定的,如果不设置的话项目是无法编译的;可以通过 $(AppendTargetFrameworkToOutputPath) 属性指定是否将此加入到输出路径中。

现在,你应该可以更轻松地设置你的输出路径,而不用担心总会出现各种意料之外的子文件夹了吧!

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
————————————————
版权声明:本文为CSDN博主「walter lv」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WPwalter/article/details/88384117

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3 + Vite项目中使用WebSocket可以通过`WebSocket`对象来实现,WebSocket的地址需要填写后端的WebSocket服务地址。你可以在Vue的组件中使用WebSocket对象,示例代码如下: ```javascript // 创建WebSocket对象,使用后端WebSocket服务地址 const socket = new WebSocket('ws://localhost:5000/ws'); // 监听WebSocket的打开事件 socket.addEventListener('open', (event) => { console.log('WebSocket已连接'); }); // 监听WebSocket的消息事件 socket.addEventListener('message', (event) => { console.log('接收到消息:', event.data); }); // 监听WebSocket的关闭事件 socket.addEventListener('close', (event) => { console.log('WebSocket已关闭'); }); // 发送消息 socket.send('Hello WebSocket!'); ``` 在C# asp.net core后端中,可以使用`Microsoft.AspNetCore.WebSockets`包来实现WebSocket服务。示例代码如下: ```csharp // 添加WebSocket中间件 app.UseWebSockets(); // 注册WebSocket处理器 app.Use(async (context, next) => { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); // 处理WebSocket消息 await HandleWebSocketAsync(webSocket); } else { await next(); } }); // 处理WebSocket消息的方法 async Task HandleWebSocketAsync(WebSocket webSocket) { byte[] buffer = new byte[1024 * 4]; WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); while (!result.CloseStatus.HasValue) { // 处理WebSocket消息 string message = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"接收到消息:{message}"); // 发送WebSocket消息 byte[] messageBytes = Encoding.UTF8.GetBytes($"Echo: {message}"); await webSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None); // 继续接收WebSocket消息 result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); } // 关闭WebSocket连接 await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); } ``` 注意:在使用WebSocket时,需要确保后端WebSocket服务地址正确,且后端的WebSocket协议一致。例如,如果端使用的是`ws`协议,则后端也需要使用`ws`协议;如果端使用的是`wss`协议,则后端也需要使用`wss`协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值