You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2019/05/05 13:20:22 UTC

[plc4x] 08/12: - Fine tuned the build and integrated it to maven

This is an automated email from the ASF dual-hosted git repository.

jfeinauer pushed a commit to branch feature/code-gen
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 10011f93905a8f1770b325798b9e461faab44f45
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sat May 4 21:31:34 2019 +0200

    - Fine tuned the build and integrated it to maven
---
 README                                             | 16 +++--
 plc4net/{plc4net => api}/PlcDriverManager.cs       |  0
 plc4net/api/api.csproj                             | 27 ++++++++
 plc4net/{plc4net => api}/api/IPlcConnection.cs     |  8 +--
 plc4net/{plc4net => api}/api/IPlcDriver.cs         |  0
 .../api/authentication/IPlcAuthentication.cs       |  0
 .../PlcUsernamePasswordAuthentication.cs           |  0
 .../api/metadata/IPlcConnectionMetadata.cs         |  0
 .../exceptions/PlcConnectionException.cs           |  0
 .../{plc4net => api}/exceptions/PlcException.cs    |  0
 .../exceptions/PlcInvalidFieldException.cs         |  0
 .../{plc4net => api}/messages/IPlcFieldRequest.cs  |  0
 .../{plc4net => api}/messages/IPlcFieldResponse.cs |  0
 plc4net/{plc4net => api}/messages/IPlcMessage.cs   |  0
 .../{plc4net => api}/messages/IPlcReadRequest.cs   |  0
 .../messages/IPlcReadRequestBuilder.cs             |  0
 .../{plc4net => api}/messages/IPlcReadResponse.cs  |  0
 plc4net/{plc4net => api}/messages/IPlcRequest.cs   |  0
 .../messages/IPlcRequestBuilder.cs                 |  0
 plc4net/{plc4net => api}/messages/IPlcResponse.cs  |  0
 .../messages/IPlcSubscriptionEventArgs.cs          |  0
 .../messages/IPlcSubscriptionRequest.cs            |  0
 .../messages/IPlcSubscriptionRequestBuilder.cs     |  0
 .../messages/IPlcSubscriptionResponse.cs           |  0
 .../messages/IPlcUnsubscriptionRequest.cs          |  0
 .../messages/IPlcUnsubscriptionRequestBuilder.cs   |  0
 .../messages/IPlcUnsubscriptionResponse.cs         |  0
 .../{plc4net => api}/messages/IPlcWriteRequest.cs  |  0
 .../messages/IPlcWriteRequestBuilder.cs            |  0
 plc4net/{plc4net => api}/model/IPlcField.cs        |  0
 .../model/IPlcSubscriptionHandle.cs                |  0
 plc4net/api/pom.xml                                | 72 ++++++++++++++++++++++
 plc4net/{plc4net => api}/types/PlcResponseCode.cs  |  0
 plc4net/plc4net.driver/IPlcDriver.cs               | 10 ---
 plc4net/plc4net.driver/plc4net.driver.csproj       | 22 +++++++
 plc4net/plc4net.driver/pom.xml                     | 68 ++++++++++++++++++++
 plc4net/plc4net.sln                                | 22 ++++++-
 plc4net/plc4net/plc4net.csproj                     | 10 ---
 plc4net/pom.xml                                    | 46 ++++++++++++++
 pom.xml                                            | 10 +++
 40 files changed, 281 insertions(+), 30 deletions(-)

diff --git a/README b/README
index edd064d..a22df76 100644
--- a/README
+++ b/README
@@ -42,6 +42,10 @@ If you're building a source-distribution and haven't installed git yet, be sure
 
     sudo get install git
 
+In order to build the .Net version, please install the .Net package according to this guide:
+
+https://dev.to/carlos487/installing-dotnet-core-in-ubuntu-1804-7lp
+
 Mac
 ---
 
@@ -61,15 +65,19 @@ Install `Python 2.7`:
 
 Be sure to re-open the command window or the changes will not apply.
 
+If you're going to build the `with-dotnet` profile you also need to install DotNet.
+Please download it from: https://dotnet.microsoft.com/download and run the installer.
+
 Windows
 -------
 
 Some tools need to be installed before being able to build on Windows:
 
-- WinBuilds
-- Bison
-- Flex
-- Python 2.7
+- WinBuilds (for `with-cpp`, `with-proxies` profiles)
+- Bison (for `with-cpp` profiles)
+- Flex (for `with-cpp` profiles)
+- Python 2.7 (for `with-python`, `with-proxies` profiles)
+- Dotnet (for `with-dotnet` profiles)
 
 He have tested WinBuilds with the bundle of: http://win-builds.org/doku.php/download_and_installation_from_windows
 When running the installer, make sure to select the options:
diff --git a/plc4net/plc4net/PlcDriverManager.cs b/plc4net/api/PlcDriverManager.cs
similarity index 100%
rename from plc4net/plc4net/PlcDriverManager.cs
rename to plc4net/api/PlcDriverManager.cs
diff --git a/plc4net/api/api.csproj b/plc4net/api/api.csproj
new file mode 100644
index 0000000..eb00812
--- /dev/null
+++ b/plc4net/api/api.csproj
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <RootNamespace>org.apache.plc4net</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/plc4net/plc4net/api/IPlcConnection.cs b/plc4net/api/api/IPlcConnection.cs
similarity index 91%
rename from plc4net/plc4net/api/IPlcConnection.cs
rename to plc4net/api/api/IPlcConnection.cs
index 0b4ad43..cc22990 100644
--- a/plc4net/plc4net/api/IPlcConnection.cs
+++ b/plc4net/api/api/IPlcConnection.cs
@@ -66,24 +66,24 @@ namespace org.apache.plc4net.api
         /// Request builder for constructing read requests
         /// </summary>
         /// <returns>null if the connection does not support reading</returns>
-        IPlcReadRequestBuilder? ReadRequestBuilder { get; }
+        IPlcReadRequestBuilder ReadRequestBuilder { get; }
 
         /// <summary>
         /// Request builder for constructing write requests
         /// </summary>
         /// <returns>null if the connection does not support writing</returns>
-        IPlcWriteRequestBuilder? WriteRequestBuilder { get; }
+        IPlcWriteRequestBuilder WriteRequestBuilder { get; }
 
         /// <summary>
         /// Request builder for constructing subscription requests
         /// </summary>
         /// <returns>null if the connection does not support subscriptions</returns>
-        IPlcSubscriptionRequestBuilder? SubscriptionRequestBuilder { get; }
+        IPlcSubscriptionRequestBuilder SubscriptionRequestBuilder { get; }
 
         /// <summary>
         /// Request builder for unsubscribing
         /// </summary>
         /// <returns>null if the connection does not support subscriptions</returns>
-        IPlcUnsubscriptionRequestBuilder? UnsubscriptionRequestBuilder { get; }
+        IPlcUnsubscriptionRequestBuilder UnsubscriptionRequestBuilder { get; }
     }
 }
\ No newline at end of file
diff --git a/plc4net/plc4net/api/IPlcDriver.cs b/plc4net/api/api/IPlcDriver.cs
similarity index 100%
rename from plc4net/plc4net/api/IPlcDriver.cs
rename to plc4net/api/api/IPlcDriver.cs
diff --git a/plc4net/plc4net/api/authentication/IPlcAuthentication.cs b/plc4net/api/api/authentication/IPlcAuthentication.cs
similarity index 100%
rename from plc4net/plc4net/api/authentication/IPlcAuthentication.cs
rename to plc4net/api/api/authentication/IPlcAuthentication.cs
diff --git a/plc4net/plc4net/api/authentication/PlcUsernamePasswordAuthentication.cs b/plc4net/api/api/authentication/PlcUsernamePasswordAuthentication.cs
similarity index 100%
rename from plc4net/plc4net/api/authentication/PlcUsernamePasswordAuthentication.cs
rename to plc4net/api/api/authentication/PlcUsernamePasswordAuthentication.cs
diff --git a/plc4net/plc4net/api/metadata/IPlcConnectionMetadata.cs b/plc4net/api/api/metadata/IPlcConnectionMetadata.cs
similarity index 100%
rename from plc4net/plc4net/api/metadata/IPlcConnectionMetadata.cs
rename to plc4net/api/api/metadata/IPlcConnectionMetadata.cs
diff --git a/plc4net/plc4net/exceptions/PlcConnectionException.cs b/plc4net/api/exceptions/PlcConnectionException.cs
similarity index 100%
rename from plc4net/plc4net/exceptions/PlcConnectionException.cs
rename to plc4net/api/exceptions/PlcConnectionException.cs
diff --git a/plc4net/plc4net/exceptions/PlcException.cs b/plc4net/api/exceptions/PlcException.cs
similarity index 100%
rename from plc4net/plc4net/exceptions/PlcException.cs
rename to plc4net/api/exceptions/PlcException.cs
diff --git a/plc4net/plc4net/exceptions/PlcInvalidFieldException.cs b/plc4net/api/exceptions/PlcInvalidFieldException.cs
similarity index 100%
rename from plc4net/plc4net/exceptions/PlcInvalidFieldException.cs
rename to plc4net/api/exceptions/PlcInvalidFieldException.cs
diff --git a/plc4net/plc4net/messages/IPlcFieldRequest.cs b/plc4net/api/messages/IPlcFieldRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcFieldRequest.cs
rename to plc4net/api/messages/IPlcFieldRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcFieldResponse.cs b/plc4net/api/messages/IPlcFieldResponse.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcFieldResponse.cs
rename to plc4net/api/messages/IPlcFieldResponse.cs
diff --git a/plc4net/plc4net/messages/IPlcMessage.cs b/plc4net/api/messages/IPlcMessage.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcMessage.cs
rename to plc4net/api/messages/IPlcMessage.cs
diff --git a/plc4net/plc4net/messages/IPlcReadRequest.cs b/plc4net/api/messages/IPlcReadRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcReadRequest.cs
rename to plc4net/api/messages/IPlcReadRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcReadRequestBuilder.cs b/plc4net/api/messages/IPlcReadRequestBuilder.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcReadRequestBuilder.cs
rename to plc4net/api/messages/IPlcReadRequestBuilder.cs
diff --git a/plc4net/plc4net/messages/IPlcReadResponse.cs b/plc4net/api/messages/IPlcReadResponse.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcReadResponse.cs
rename to plc4net/api/messages/IPlcReadResponse.cs
diff --git a/plc4net/plc4net/messages/IPlcRequest.cs b/plc4net/api/messages/IPlcRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcRequest.cs
rename to plc4net/api/messages/IPlcRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcRequestBuilder.cs b/plc4net/api/messages/IPlcRequestBuilder.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcRequestBuilder.cs
rename to plc4net/api/messages/IPlcRequestBuilder.cs
diff --git a/plc4net/plc4net/messages/IPlcResponse.cs b/plc4net/api/messages/IPlcResponse.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcResponse.cs
rename to plc4net/api/messages/IPlcResponse.cs
diff --git a/plc4net/plc4net/messages/IPlcSubscriptionEventArgs.cs b/plc4net/api/messages/IPlcSubscriptionEventArgs.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcSubscriptionEventArgs.cs
rename to plc4net/api/messages/IPlcSubscriptionEventArgs.cs
diff --git a/plc4net/plc4net/messages/IPlcSubscriptionRequest.cs b/plc4net/api/messages/IPlcSubscriptionRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcSubscriptionRequest.cs
rename to plc4net/api/messages/IPlcSubscriptionRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcSubscriptionRequestBuilder.cs b/plc4net/api/messages/IPlcSubscriptionRequestBuilder.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcSubscriptionRequestBuilder.cs
rename to plc4net/api/messages/IPlcSubscriptionRequestBuilder.cs
diff --git a/plc4net/plc4net/messages/IPlcSubscriptionResponse.cs b/plc4net/api/messages/IPlcSubscriptionResponse.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcSubscriptionResponse.cs
rename to plc4net/api/messages/IPlcSubscriptionResponse.cs
diff --git a/plc4net/plc4net/messages/IPlcUnsubscriptionRequest.cs b/plc4net/api/messages/IPlcUnsubscriptionRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcUnsubscriptionRequest.cs
rename to plc4net/api/messages/IPlcUnsubscriptionRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcUnsubscriptionRequestBuilder.cs b/plc4net/api/messages/IPlcUnsubscriptionRequestBuilder.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcUnsubscriptionRequestBuilder.cs
rename to plc4net/api/messages/IPlcUnsubscriptionRequestBuilder.cs
diff --git a/plc4net/plc4net/messages/IPlcUnsubscriptionResponse.cs b/plc4net/api/messages/IPlcUnsubscriptionResponse.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcUnsubscriptionResponse.cs
rename to plc4net/api/messages/IPlcUnsubscriptionResponse.cs
diff --git a/plc4net/plc4net/messages/IPlcWriteRequest.cs b/plc4net/api/messages/IPlcWriteRequest.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcWriteRequest.cs
rename to plc4net/api/messages/IPlcWriteRequest.cs
diff --git a/plc4net/plc4net/messages/IPlcWriteRequestBuilder.cs b/plc4net/api/messages/IPlcWriteRequestBuilder.cs
similarity index 100%
rename from plc4net/plc4net/messages/IPlcWriteRequestBuilder.cs
rename to plc4net/api/messages/IPlcWriteRequestBuilder.cs
diff --git a/plc4net/plc4net/model/IPlcField.cs b/plc4net/api/model/IPlcField.cs
similarity index 100%
rename from plc4net/plc4net/model/IPlcField.cs
rename to plc4net/api/model/IPlcField.cs
diff --git a/plc4net/plc4net/model/IPlcSubscriptionHandle.cs b/plc4net/api/model/IPlcSubscriptionHandle.cs
similarity index 100%
rename from plc4net/plc4net/model/IPlcSubscriptionHandle.cs
rename to plc4net/api/model/IPlcSubscriptionHandle.cs
diff --git a/plc4net/api/pom.xml b/plc4net/api/pom.xml
new file mode 100644
index 0000000..b531d23
--- /dev/null
+++ b/plc4net/api/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4net</artifactId>
+    <version>0.4.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4net-api</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4Net: API</name>
+  <description>Implementation of the protocol adapters for usage as .Net module.</description>
+
+  <!-- Disabled for now as C# support is currently not installed in Apache SonarQube -->
+  <!--properties>
+    <sonar.language>c#</sonar.language>
+  </properties-->
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <id>dotnet-build</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <executable>dotnet</executable>
+              <workingDirectory>${project.basedir}</workingDirectory>
+              <arguments>
+                <argument>build</argument>
+                <argument>api.csproj</argument>
+                <argument>--configuration=Debug</argument>
+                <argument>--framework=netstandard2.0</argument>
+                <argument>--output=${project.build.directory}/build</argument>
+                <argument>-p:Version=${project.version}</argument>
+              </arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
\ No newline at end of file
diff --git a/plc4net/plc4net/types/PlcResponseCode.cs b/plc4net/api/types/PlcResponseCode.cs
similarity index 100%
rename from plc4net/plc4net/types/PlcResponseCode.cs
rename to plc4net/api/types/PlcResponseCode.cs
diff --git a/plc4net/plc4net.driver/IPlcDriver.cs b/plc4net/plc4net.driver/IPlcDriver.cs
deleted file mode 100644
index b6b1f99..0000000
--- a/plc4net/plc4net.driver/IPlcDriver.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace plc4net.driver
-{
-    /// <summary>
-    /// Interface for PLC drivers to be implemented
-    /// </summary>
-    public interface IPlcDriver
-    {
-        IPlcC
-    }
-}
\ No newline at end of file
diff --git a/plc4net/plc4net.driver/plc4net.driver.csproj b/plc4net/plc4net.driver/plc4net.driver.csproj
index 9f5c4f4..e54dfc4 100644
--- a/plc4net/plc4net.driver/plc4net.driver.csproj
+++ b/plc4net/plc4net.driver/plc4net.driver.csproj
@@ -1,7 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <BaseOutputPath>target/classes</BaseOutputPath>
+    <BaseIntermediateOutputPath>target/classes-intermediate</BaseIntermediateOutputPath>
+    <RestoreOutputPath>target/restore-output-path</RestoreOutputPath>
   </PropertyGroup>
 
 </Project>
diff --git a/plc4net/plc4net.driver/pom.xml b/plc4net/plc4net.driver/pom.xml
new file mode 100644
index 0000000..4be89de
--- /dev/null
+++ b/plc4net/plc4net.driver/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4net</artifactId>
+    <version>0.4.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4net-driver</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4Net: Driver</name>
+  <description>Implementation of the protocol adapters for usage as .Net module.</description>
+
+  <!-- Disabled for now as C# support is currently not installed in Apache SonarQube -->
+  <!--properties>
+    <sonar.language>c#</sonar.language>
+  </properties-->
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <id>dotnet-build</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <executable>dotnet</executable>
+              <workingDirectory>${project.basedir}</workingDirectory>
+              <arguments>
+                <argument>build</argument>
+                <argument>plc4net.driver.csproj</argument>
+              </arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
\ No newline at end of file
diff --git a/plc4net/plc4net.sln b/plc4net/plc4net.sln
index 1781a3a..0f4ddcc 100644
--- a/plc4net/plc4net.sln
+++ b/plc4net/plc4net.sln
@@ -1,9 +1,27 @@
-
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.28803.156
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "plc4net", "plc4net\plc4net.csproj", "{343770DC-ECE5-4131-9066-A09C120BB3D9}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api", "plc4net\plc4net.csproj", "{343770DC-ECE5-4131-9066-A09C120BB3D9}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/plc4net/plc4net/plc4net.csproj b/plc4net/plc4net/plc4net.csproj
deleted file mode 100644
index 5d10bac..0000000
--- a/plc4net/plc4net/plc4net.csproj
+++ /dev/null
@@ -1,10 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
-    <RootNamespace>org.apache.plc4net</RootNamespace>
-    <LangVersion>8.0</LangVersion>
-    <NullableContextOptions>enable</NullableContextOptions>
-  </PropertyGroup>
-
-</Project>
diff --git a/plc4net/pom.xml b/plc4net/pom.xml
new file mode 100644
index 0000000..2b0123f
--- /dev/null
+++ b/plc4net/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-parent</artifactId>
+    <version>0.4.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4net</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4Net</name>
+  <description>Implementation of the protocol adapters for usage as .Net module.</description>
+
+  <!-- Disabled for now as C# support is currently not installed in Apache SonarQube -->
+  <!--properties>
+    <sonar.language>c#</sonar.language>
+  </properties-->
+
+  <modules>
+    <module>api</module>
+    <!--module>plc4net.driver</module-->
+  </modules>
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6494c96..ff37648 100644
--- a/pom.xml
+++ b/pom.xml
@@ -735,6 +735,9 @@
             <!-- CLion stuff (C++ IDE) -->
             <exclude>**/cmake-build-debug/**</exclude>
 
+            <!-- Stuff created during a plc4net build -->
+            <exclude>**/obj/**</exclude>
+
             <!-- Temporarily exclude generated code from thrift in python modules -->
             <exclude>generated/**</exclude>
 
@@ -1244,6 +1247,13 @@
     </profile>
 
     <profile>
+      <id>with-dotnet</id>
+      <modules>
+        <module>plc4net</module>
+      </modules>
+    </profile>
+
+    <profile>
       <id>with-python</id>
       <modules>
         <module>plc4py</module>