在VisualStudio2019中,我能够生成一个WCF服务引用,该引用使用用于WCF方法参数的共享类。只要我在生成服务引用之前为包含共享类的项目添加了项目引用,它就会使用共享类而不是在reference.cs中生成类。
在Visual 2022中,我无法实现相同的目标。无论我尝试什么,新类都将在引用文件中生成,并且不会使用项目引用中的现有类。
“引用程序集中的重用类型”中服务引用的引用程序集列表不包括项目引用。VS 2019年中的相同列表显示此列表中的本地项目引用。
通过右键单击项目、添加/项目引用、选中共享库的复选框,添加了对同一解决方案中包含的项目的引用。然后右击project、Add/Connected Service、WCF Web Service,将WCF服务器的net.tcp:://localhost添加到URI中,更改服务名称,然后按Next (注意我共享的项目不在引用程序集列表中,如VS 2019年),按下一步,按Finish。预期我在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);
发布于 2022-11-28 18:24:33
经过进一步调查,这个问题似乎是由.NET(6.0)和.NET框架(4.8)引起的,而不是针对2022年和2019年。
如果我在VisualStudio2022中创建一个.NET框架(4.8)应用程序与一个.NET (6.0)应用程序,我就能够创建引用现有类的WCF服务引用。
仍然不清楚为什么在.NET 6.0中没有看到相同的行为。
https://stackoverflow.com/questions/74540561
复制相似问题