C
C#2mo ago
LastExceed

how do i generate WCF connected services on build/restore?

Ancient tech, I know. Unfortunately I have to live with it. The project currently looks like this:
MySolution/
MyProject/
Connected Services/
MyService1/
ConnectedService.json
Reference.cs
MyService2/
ConnectedService.json
Reference.cs
MyService3/
ConnectedService.json
Reference.cs
MyProject.csproj
Program.cs
...
MySolution/
MyProject/
Connected Services/
MyService1/
ConnectedService.json
Reference.cs
MyService2/
ConnectedService.json
Reference.cs
MyService3/
ConnectedService.json
Reference.cs
MyProject.csproj
Program.cs
...
The Reference.cs files are generated either via RightClick -> update each service in the solution explorer, or by running dotnet-svcutil --update 'Connected Services\MyService1\ConnectedService.json' (assuming you have that tool installed). I'd like to configure my project so that these files get automatically generated on build or restore, but avoid re-generating them if they already exist. How do I do this?
2 Replies
LastExceed
LastExceedOP2mo ago
I spent many hours reading through MSDN trying to wrap my head around MSBuild, but the best I was able to put together is this:
<Target Name="CodeGenPre">
<!-- no idea why this is necessary -->
<Exec Command="dotnet tool restore"
ConsoleToMsBuild="true"/>
</Target>



<Target Name="CodeGen1"
Condition="!Exists('Connected Services/MyService1/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService1\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService1/Reference.cs"/>
</ItemGroup>
</Target>



<Target Name="CodeGen2"
Condition="!Exists('Connected Services/MyService2/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService2\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService2/Reference.cs"/>
</ItemGroup>
</Target>



<Target Name="CodeGen3"
Condition="!Exists('Connected Services/MyService3/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService3\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService3/Reference.cs"/>
</ItemGroup>
</Target>
<Target Name="CodeGenPre">
<!-- no idea why this is necessary -->
<Exec Command="dotnet tool restore"
ConsoleToMsBuild="true"/>
</Target>



<Target Name="CodeGen1"
Condition="!Exists('Connected Services/MyService1/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService1\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService1/Reference.cs"/>
</ItemGroup>
</Target>



<Target Name="CodeGen2"
Condition="!Exists('Connected Services/MyService2/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService2\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService2/Reference.cs"/>
</ItemGroup>
</Target>



<Target Name="CodeGen3"
Condition="!Exists('Connected Services/MyService3/Reference.cs')"
DependsOnTargets="CodeGenPre"
BeforeTargets="BeforeBuild"
>
<Exec Command="dotnet dotnet-svcutil --noLogo --update &quot;Connected Services\MyService3\ConnectedService.json&quot;"
ConsoleToMsBuild="true"/>
<ItemGroup>
<Compile Include="Connected Services/MyService3/Reference.cs"/>
</ItemGroup>
</Target>
very copypasty, very slow (compared to doing it manually using the UI), CodeGen1-3 run sequentially (even more slow), and it doesn't use the provider configured in the ConnectedService.json file. There gotta be a better way to do this. how?
felsokning
felsokning2mo ago
It's been a long time since I messed with WCF -- but there used to be a means to have the connections autogenerated but I don't remember how it was done. This is my autogenerated service connector: https://github.com/felsokning/Tomte/blob/master/Fels%C3%B6kning.Tomte/Fels%C3%B6kning.Tomte.PowerShell/WorkflowService.cs So, I know that it can be done - but I'm genuinely sorry that I can't remember how it was done. ☹️

Did you find this page helpful?