Last active
March 26, 2022 12:41
-
-
Save shanecelis/db73854d7257fdd2a8798d3ba7d4d00f to your computer and use it in GitHub Desktop.
Copy your dotnet libraries to your Unity game project
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<!-- Original code[1] Copyright (c) 2022 Shane Celis[2] | |
Licensed under the MIT License[3] | |
[1]: https://gist.github.com/shanecelis/db73854d7257fdd2a8798d3ba7d4d00f | |
[2]: https://twitter.com/shanecelis | |
[3]: https://opensource.org/licenses/MIT | |
* * * | |
CopyToUnity.csproj_ | |
=================== | |
Copy your dotnet libraries to your Unity game project | |
Import this file in a dotnet project to automatically copy its `netstandard2.0` | |
`.dll` and `.pdb` files to your Unity project when it's built. | |
Usage | |
===== | |
After installation it will run whenever built by default. | |
$ dotnet build | |
Assuming build includes `netstandard2.0`, the build will copy its `.dll` | |
and `.pdb` files to a Unity project's `/Assets/netstandard2.0/$(AssemblyName)/` | |
directory. However, it can also be called directly and auto copying can be | |
turned off. | |
$ dotnet build -target:CopyToUnity | |
Installation | |
============ | |
Choose one of the three cases that best suits your needs. | |
## Case 1: Place this file with a Unity project. | |
1. Place `CopyToUnity.csproj_` file in your Unity project's root directory. | |
2. Edit the `UnityProjectPaths` in `CopyToUnity.csproj_` to your Unity project's | |
path. | |
3. Add the following tag to your dotnet's csproj file.^* | |
<Import Project="/Users/YOU/YOUR-GAME/CopyToUnity.csproj_"/> | |
* Can add multiple import lines for multiple Unity project destinations. | |
## Case 2: Place this file with a dotnet project. | |
1. Place `CopyToUnity.csproj_` file in your dotnet project's root directory. | |
2. Import `CopyToUnity.csproj_` and add your unity paths in your `.csproj` file | |
like so: | |
<Import Project="CopyToUnity.csproj_"/> | |
<ItemGroup> | |
<UnityProjectPaths Include="/Users/YOU/YOUR-GAME1"/> | |
<UnityProjectPaths Include="/Users/YOU/YOUR-GAME2"/> | |
<UnityProjectPaths Include="/Users/YOU/YOUR-GAME3"/> | |
</ItemGroup> | |
## Case 3: Copy and paste this straight into my veins! | |
1. Do like I did before I had this file and just copy and paste | |
these lines directly into all your spawling `.csproj` files. | |
<Target Name="CustomAfterBuild" AfterTargets="Build"> | |
<ItemGroup> | |
<_CustomFiles Include="bin/Debug/netstandard2.0/*.dll" /> | |
<_CustomFiles Include="bin/Debug/netstandard2.0/*.pdb" /> | |
</ItemGroup> | |
<MakeDir Directories="/Users/YOU/YOUR-GAME/Assets/netstandard2.0/$(AssemblyName)"/> | |
<Copy SourceFiles="@(_CustomFiles)" | |
DestinationFolder="/Users/YOU/YOUR-GAME/Assets/netstandard2.0/$(AssemblyName)" | |
SkipUnchangedFiles="true" /> | |
</Target> | |
2. Kiss maintainability goodbye! | |
Configuration | |
============= | |
The auto build feature can be turned off and the output directory within the | |
Unity project can be changed. | |
<PropertyGroup> | |
<UnityOutputDir>/Assets/netstandard2.0/$(AssemblyName)/</UnityOutputDir> | |
<CopyToUnityAfterBuild>false</CopyToUnityAfterBuild> | |
</PropertyGroup> | |
NOTES | |
===== | |
* Extension '.csproj_' chosen so that it won't be confused with the actual | |
'.csproj' file by `dotnet build` and such. | |
TODO | |
==== | |
--> | |
<Project> | |
<PropertyGroup> | |
<UnityOutputDir>/Assets/netstandard2.0/$(AssemblyName)/</UnityOutputDir> | |
<CopyToUnityAfterBuild>true</CopyToUnityAfterBuild> | |
</PropertyGroup> | |
<ItemGroup> | |
<!-- Case 1. Step 2. Put your game or games here. --> | |
<!-- <UnityProjectPaths Include="/Users/YOU/YOUR-GAME1"/> --> | |
<!-- <UnityProjectPaths Include="/Users/YOU/YOUR-GAME2"/> --> | |
</ItemGroup> | |
<Target Name="PreCopyToUnity"> | |
<PropertyGroup> | |
<TargetFramework>netstandard2.0</TargetFramework> | |
</PropertyGroup> | |
</Target> | |
<Target Name="CopyToUnity" DependsOnTargets="PreCopyToUnity;Build"> | |
<CallTarget Targets="_CopyToUnity"/> | |
</Target> | |
<Target Name="_CopyToUnity" | |
Condition="'$(TargetFramework)' == 'netstandard2.0'" | |
Outputs="%(UnityProjectPaths.Identity)"> | |
<ItemGroup> | |
<_CustomFiles Include="$(OutputPath)/*.dll" /> | |
<_CustomFiles Include="$(OutputPath)/*.pdb" /> | |
</ItemGroup> | |
<ItemGroup> | |
<_UnityOutputPaths Include="@(UnityProjectPaths->'%(FullPath)$(UnityOutputDir)')"/> | |
</ItemGroup> | |
<MakeDir Directories="@(_UnityOutputPaths)"/> | |
<Copy SourceFiles="@(_CustomFiles)" | |
DestinationFolder="%(_UnityOutputPaths.FullPath)" | |
SkipUnchangedFiles="true" /> | |
</Target> | |
<Target Name="CopyToUnityAfterBuild" | |
AfterTargets="Build" | |
DependsOnTargets="_CopyToUnity" | |
Condition="'$(CopyToUnityAfterBuild)' == 'true'"> | |
</Target> | |
</Project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment