使用 Roslyn 和 .NET Core:如何解析“命名空间‘System.Windows’中不存在类型或命名空间名称“Forms”

问题描述 投票:0回答:1

我正在开发一个使用 Roslyn 进行 C# 代码运行时编译的系统。

我使用此代码添加程序集,将完全限定的程序集文件名传递给该方法。

public bool AddAssembly(string assemblyDll)
{
     if (string.IsNullOrEmpty(assemblyDll)) return false;

     var file = Path.GetFullPath(assemblyDll);

     if (!File.Exists(file))
     {
         // check framework or dedicated runtime app folder
         var path = Path.GetDirectoryName(typeof(object).Assembly.Location);
         file = Path.Combine(path, assemblyDll);

         if (!File.Exists(file))
             return false;
     }

     if (References.Any(r => r.FilePath == file)) 
         return true;

     try
     {
         var reference = MetadataReference.CreateFromFile(file);
         References.Add(reference);
     }
     catch
     {
         return false;
     }

     return true;
}

一切都运行良好,直到我想在代码中构建一个 Winforms 表单。 尽管将 System.Windows.Forms.dll 添加到程序集引用中,我仍然收到错误

命名空间“System.Windows”中不存在类型或命名空间名称“Forms”

阅读有关此错误消息的其他文章,所有解决方案都涉及 Visual Studio 并编辑

.csproj
文件以添加

<UseWindowsForms>true</UseWindowsForms>

那么,如何让 Roslyn 识别出我想要使用 Winforms 表单?

c# roslyn
1个回答
0
投票

您不需要任何代码来加载程序集,除非您正在实现一种插件/附加架构。您所需要做的就是添加对您的项目的引用。

当您使用 Windows 窗体应用程序 (.NET Core) 模板创建项目时,您的 *.csproj 将如下所示:

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

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

你的参考资料是这样的:

而且您无需执行任何操作。另一方面,如果您从其他项目类型开始,您可能必须更改 *.csproj 并手动添加引用。

© www.soinside.com 2019 - 2024. All rights reserved.