GithubHelp home page GithubHelp logo

Automated build about 1remote HOT 26 CLOSED

1remote avatar 1remote commented on May 22, 2024
Automated build

from 1remote.

Comments (26)

majkinetor avatar majkinetor commented on May 22, 2024 1

Thanks. I will move this into its own file on repo and make automated build from CLI.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024 1

I managed to build it using the following steps

choco install visualstudio2019-workload-universal
choco install windows-sdk-10-version-1809-all

$lastSdkVersion = Get-ChildItem "${Env:ProgramFiles(x86)}\Windows Kits\10\Include" | Sort-Object -Descending | Select-Object -First 1 -Expand Name

# This is added to PRM.Core and PRemoteM csproj files
"<PropertyGroup>
      <TargetPlatformVersion>${lastSdkVersion}</TargetPlatformVersion>
</PropertyGroup>" 

Now, I need to test this in the sandbox and with VS express. The point is to find minimal set of dependencies.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024 1

but using System.Windows is do needed in VmServerListPage.cs

That one isn't removed, those that got removed are Windows.Application.Store, System.Windows.Data, System.ComponentModel, System.Diagnostics.

and I dont think the unused usings will cause this build problem.

I know :-).

I am not sure what is going on here, but that action solved it for me and since its repeatable, you can try it on your own. I noticed once for that error that it was enough to just hover with mouse over the error line, and the error would disappear after that in VS error window ?! Didn't analyze it more.

But I have no impression of this file as well

When you deselect click once, it is added automatically by VS in csproj, but not in file system

certificate is required so that it can publish to microsoft store, do you know how any approch for microsoft store package build into CI?

OR we may ignore the build msix package in CI, CI will only offering the WIn32 exe release.

I am up for that one as I personally think almost nobody will use this from Store (maybe I am wrong, but the target audience for store are not IT professionals).

OK, let me try to ignore it in CI until we have a way to use secrets vault.

BTW, Installing and starting a sandbox on your local machine should be trivial, you should check it out yourself. I will ofc document everything once its done but If you need any more info now let me know (some notes are at https://github.com/VShawn/PRemoteM/issues/58#issuecomment-761540765)

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

I try write a demo:

Development

PReomteM is written in the CSharp, UI power by WPF.

Environment

Here is what you need to setup a development environment:

  1. Windows 10 1703 or later
  2. Microsoft Visual Studio 2019 (VS2019) Community or higher
    with
    • .NET desktop development
    • Windows 10 SDK (10.0.17763.0)
    • .NET Framework 4.8 SDK
  3. .NET Framework 4.8 Dev Pack (may included in VS2019)
  4. (Optional) ReSharper
  5. (Optional) Git

Build

  1. Clone from GitHub.
  2. Open PRM solution by VS2019
  3. Resotre all NuGet Packages
    image
  4. You can build PReomteM now.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

Microsoft Visual Studio 2019 (VS2019) Community or higher

This is not enough and not precise. VS comes with bunch of modules.

This one requires:

  • Universal Windows Platform Development (2.5 GB with 87 packages :S)

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

Looks like even that is not enough. Reference is still missing on all projects Windows.X (PopUp, ApplicationModel, ...).

Old dotNet is horror.

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

Sorry, I forgot it needs Win10 SDK support.

Here is all I have on my workstation in company (can't find a button for turn VS2019 installer UI into english):

image
image
image
image

MY VS2019 install config.zip

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

I keep getting this error when trying to build PRemoteM in SandBox:

Unable to write manifest 'obj\Debug\PRemoteM.exe.manifest'. Could not load file or assembly 'System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified. PRemoteM

Core builds fine.

I succeeded to compile it but not sure how, can't reproduce it easily.

Will look into it some more...

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

I pushed this to branch build.

What I am trying can be accomplished locally this way:

  1. Open admin powershell in root folder of the project
  2. Set convenience alias: Set-Alias ib $pwd\Invoke-Build.ps1
  3. See available tasks with ib ?
  4. Run ib BuildInSandbox

Last command will complain if you don't have sandbox installed and show you command to do it. After that it does this:

  1. Opens clean environment
  2. Installs ALL prereq using ib Deps; takes around 15 minutes
  3. It tries to build using CLI commands after that but it will fail due to SqlXml error

You can now open VS2019 in sandbox and try to build it. Project is available on Desktop.

Those are the deps so far and VS builds it after some interventions.

        choco install -y visualstudio2019community
        choco install -y netfx-4.8-devpack
        choco install -y visualstudio2019-workload-manageddesktop
        choco install -y visualstudio2019-workload-universal

What is the point of all this

The point is to have locally reproducible build. This will be used in CI pipeline (on any system, not necessarily GH) instead of magic we have now. Build simply becomes ib Deps; ib Build as one step pipeline.

This can also be used to setup dev environment on empty machine.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

BTW, on my own machine ib Build worked until it needed to access your private keys for installer. Build on my machine is not very relevant as I have installed tone of stuff (the same as you as shown by your screenshot, most of which are not relevant to the project).

Here is the error:

(_CreateMainPackage target) -> C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(4659,5): error APPX0104: Certificate file 'C:\FastToolsShared\git key\Shawn.pfx' not found. [C:\Work\PRemoteM\Installer\Installer.wapproj] C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(4659,5): error APPX0107: The certificate specified is not valid for signing. For more information about valid certificates, see http://go.microsoft.com/fwlink/?LinkID=241478. [C:\Work\PRemoteM\Installer\Installer.wapproj]

notice that your local folder C:\FastToolsShared\git key\Shawn.pfx is shown.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

This is how sandbox looks while installing stuff:

image

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

I think I found the problem:

  <PropertyGroup>
    <GenerateManifests>true</GenerateManifests>
  </PropertyGroup>

When this is set to false SqlXml error is no longer present. This is changed with the following option ClickOnce which is currently enabled:

image

Since this is problematic, shell we disable it ? When one does that, it adds dummy manifest file in csproj which doesn't exist on file system and next error is:

Severity Code Description Project File Line Suppression State Error CS1926 Error opening Win32 manifest file C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\Properties\app.manifest -- Could not find file 'C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\Properties\app.manifest'. PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\CSC 1 Active

Just by deleting Properties\app.manifest file within VS makes it work then (alternative would be to add manifest on your own in the project without any autogeneration and funky magic)

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

Can you check if above setting works for you and if so, please commit new PRemoteM.csproj file.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

BTW, the SqlXML assembly is present on the SandBox system, and even if I add it among references it changes nothing....

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

After this change only your key is problematic from CLI:

ib Build

image

image

This doesn't happen when building within VS for some reason...

Maybe we could remove the installer altogether :-)

If you wanna keep that, any secrets will have to go to to specific place which is IMO something we should avoid if possible as secret will have to be obtained from some type of vault during the build.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

Found another err, this time in R2Win32 configuration (Debug works fine):

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\App.xaml.cs 9 Active

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\ViewModel\VmServerListPage.cs 12 Active

Those are easily fixed using VS option Remove and sort usings in 2 mentioned files, then ib Build -aReleaseType R2Win32 works. Not sure how and why unused usings influence build, but there you go....

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

So, to recap all above :-)

  1. Remove unused usings in App.xaml.cs and ViewModel\VmServerListPage.cs
  2. Remove click once options in PRemoteM.csproj and remove dummy manifest from csproj or just add it again.
  3. Remove or fix installer project so that it doesn't require your local certificate.

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

wow a lot of great job...

1. Remove unused usings in App.xaml.cs and ViewModel\VmServerListPage.cs

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\ViewModel\VmServerListPage.cs 12 Active

but using System.Windows is do needed in VmServerListPage.cs App.xaml.cs, and I dont think the unused usings will cause this build problem.

BTW here is what unused using

screenshot

image

image

2. Remove click once options in PRemoteM.csproj and remove dummy manifest from csproj or just add it again.

click once options

I dont even know when I enable it :(, And I find it would be useless in PRM according to wiki since we publish release by 7z package and Microsoft store. I will get it disabled

manifest

[WIP] I have to go out now, check it latter.

But I have no impression of this file as well
Check app.manifest by a quick view, finding it was generated by VS2019 automatically and nothing secret in it, since git ignor it for unknown reason I may push it manually

3. Remove or fix installer project so that it doesn't require your local certificate.

certificate is required so that it can publish to microsoft store, do you know how any approch for microsoft store package build into CI?

OR we can add a dummy certificate for CI build to sign msix, push it to git, with it CI can build a msix that can be insatlled only if the user install the dummy certification, check: https://www.advancedinstaller.com/install-test-certificate-from-msix.html

OR we may ignor the build msix package in CI, CI will only offering the WIn32 exe release.

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

Installing and starting a sandbox on your local machine should be trivial

Nope, in facte It is quite difficult for me since we have a powerful firewall that make me a hard way to connect to the international networks.

image

I personally think almost nobody will use this from Store

Over 300 downloads from Store since 2020.12.01, impressive

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

Nope, in facte It is quite difficult for me since we have a powerful firewall that make me a hard way to connect to the international networks.

God damn... I'll think of something... if possible.

Over 300 downloads from Store since 2020.12.01, impressive

OK, I stand corrected :)

BTW, did you fixed the manifest problem ? I see you removed unused usings.

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

I uploaded app.manifest, did it can be treated as fixed?

https://github.com/VShawn/PRemoteM/blob/dev/PRemoteM/Properties/app.manifest

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

I just checked, and now it builds in VS2019 community without problems in Debug mode. In Win32 mode there is an erorror:

image

I committed a fix now on dev branch, and now it works up to the problem with keys which remains to be fixed.

Here is a transcript: build.log

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

OK, so this is easily fixed by excluding it from the build in that configuration:

image

It builds OK from the CLI after that and it shows that it doesn't build installer:

image

I committed a change to SLN file to dev.

So, all issues are now solved.

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

So, all issues are now solved except automation of Store build but that is for some other topic.

Now I need to see how/where to host this, and to avoid provisioning each time as it takes 15-20 minutes to install all, and there is that firewall thingy...

BTW, I noticed my R2Win32 build has 2 DLLs then what you publish:

  1. Interop.MSTSCLib.dll
  2. AxInterop.MSTSCLib.dll

from 1remote.

VShawn avatar VShawn commented on May 22, 2024

congratulations 👍 , it finally works.

Interop.MSTSCLib.dll
AxInterop.MSTSCLib.dll

this two libs is needed by RDP, genertaed by windows. All apps that support RDB need them.
https://github.com/mRemoteNG/mRemoteNG/blob/2cf5a4317d0cbd61c2135aa8f7ab608db2d88629/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs#L40

from 1remote.

majkinetor avatar majkinetor commented on May 22, 2024

That is strange.... I don't have those 2 files in my build for some reason.

I tested RDP in Sandbox and it works without them! I searched entire sandbox drive for them and they are not there.

from 1remote.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.