Visual Studio 2022 中的 WCF 服务参考不包括项目引用

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

在 Visual Studio 2019 中,我能够生成使用共享类作为 WCF 方法参数的 WCF 服务引用。只要我在生成服务引用之前为包含共享类的项目添加了项目引用,它就会使用共享类,而不是生成 reference.cs 中的类。

在 Visual Studio 2022 中我无法实现相同的目标。无论我如何尝试,都会在参考文件中生成新的类,并且不会使用项目参考中的现有类。

“重用引用程序集中的类型”中服务引用的引用程序集列表不包括项目引用。 VS 2019 中的相同列表显示了此列表中的本地项目引用。

我通过右键单击项目“添加/项目引用”,选择共享库的复选框,添加了对同一解决方案中包含的项目的引用。 然后,我通过右键单击项目、添加/连接服务、WCF Web 服务来添加服务引用,将 WCF 服务器的 net.tcp:://localhost 添加到 URI,更改服务名称,按“下一步”(注意我的共享项目) (不在引用程序集列表中,如在 VS 2019 中),按“下一步”,按“完成”。 预计我在 Reference.cs 上生成的代码会像在 VS 2019 中一样使用 WCF 方法中的共享库类。但是它生成了这些类的代码。

这是 VS 2019 中生成的接口的示例,其中共享库项目中的类在生成的方法中使用:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="ExampleService.IExampleImportService")]
public interface IExampleImportService {

    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IExampleImportService/GetExamples", ReplyAction="http://tempuri.org/IExampleImportService/GetExamplesResponse")]
    System.Threading.Tasks.Task<SharedLibrary.ExampleInfo[]> GetExamplesAsync();
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IExampleImportService/AddNewExample", ReplyAction="http://tempuri.org/IExampleImportService/AddNewExampleResponse")]
    System.Threading.Tasks.Task<uint> AddNewExampleAsync(SharedLibrary.ExampleInfo example);

这是 VS 2022 中生成的相同接口,它在方法中使用生成的类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="ExampleService.IExampleImportService")]
public interface IExampleImportService
{
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IExampleImportService/GetExamples", ReplyAction="http://tempuri.org/IExampleImportService/GetExamplesResponse")]
    System.Threading.Tasks.Task<ExampleService.ExampleInfo[]> GetExamplesAsync();
     
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IExampleImportService/AddNewExample", ReplyAction="http://tempuri.org/IExampleImportService/AddNewExampleResponse")]
    System.Threading.Tasks.Task<uint> AddNewExampleAsync(ExampleService.ExampleInfo example);
c# wcf visual-studio-2022
2个回答
0
投票

进一步调查后,问题似乎是由于 .NET(6.0) 与 .NET Framework (4.8) 而不是 VS 2022 与 VS 2019 造成的。

如果我在 Visual Studio 2022 中创建 .NET Framework (4.8) 应用程序与 .NET (6.0) 应用程序,我就能够创建引用现有类的 WCF 服务引用。

仍然不清楚为什么我在 .NET 6.0 中没有看到相同的行为。


0
投票

有可能你的共享类位于32位DLL中,因此64位VS2022在生成服务引用时无法加载它。我也遇到了同样的问题,所以我专门为 Visual Studio 创建了一个特殊的 64 位配置,暂时切换到它,在 64 位配置中编译了我的 DLL,更新了服务引用(它起作用了!),然后切换回32 位。

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