首页 > 解决方案 > 在 c# 源代码生成器中使用多个项目

问题描述

我正在尝试构建一个 C# 源代码生成器,我需要在其中引用解决方案中另一个项目中的源文件 (.cs)。有没有一种干净的方法来做到这一点?

为了清楚起见,这是我的上下文。

我正在构建一个 Blazor webapp,其中有一个服务器和一个客户端。我使用属性路由在 webapi 中设置 url。

[HttpGet]
[Route("api/clients/{id}", Name = "Client")]
public async Task<ClientViewModel> GetById(int id)
{
    var client = await _clientLogic.GetById(id);
    return _clientViewLogic.ToViewModel(client);
}

我想避免

相反,我想使用这样的东西

var url = GetClientUrl(clientId);

这应该很容易使用可以转换的源生成器来实现

[Route("api/clients/{id}", Name = "Client")]

进入

public string GetClientUrl(string id)
{
    return $"api/clients/{id}";
}

问题是,当我使用 Blazor 时,我需要将代码放入我的服务器项目和客户端项目都引用的共享项目中。但是如果我将源生成器添加到Shared项目中,那么我只有这个项目的编译上下文,我无法访问我的Server项目中的 Route 属性来构建我的函数。

所以我的全部问题是,有没有办法从链接到我的共享项目的源生成器访问我的服务器编译上下文?

我看到解决此问题的一种方法是忽略源生成器提供的编译上下文,并通过硬编码路径或其他东西基于解决方案中的所有项目创建一个新的。这应该可以,但感觉不是很干净。

标签: c#.net

解决方案


推荐阅读