-
-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tasks to Complete for .NET Core Support #40
Comments
I didn't create the IKVM package on NuGet.org. That was done by barchen. Could you please ask barchen for access first? |
@jfrijters - Thanks. I used the contact link on NuGet.org to try to get in touch with him. However, as long as you have administrative permissions there, you should be able to assign additional people as administrators. If you assign me, I can set up an ikvm-revived group so other members of the team can upload packages. |
I added you as owner of IKVM. Also I would like to help with something if I could be helpful. |
@ripenko - Thank you. |
Okay, now we are over that hurdle. If we are using the same name and same NuGet.org feed, it also follows to use the same strong name key as the identity of the package author. I haven't attempted to look for the original |
Looking at the notes on strong names here, I'm not sure we'd lose anything by starting with a fresh On a related topic, the notes also offer this advice:
which would definitely make builds simpler. |
We (as in our organization) would be open to provide the JDK8u312b07 update, once IKVM builds for .NET Framework and .NET 5/6. In the current state I cannot get either the |
The main issue with not using the same key is for existing libraries that specify IKVM as a dependency. For example if an existing library has a package reference to IKVM 8.1.5717: <PackageReference Include="IKVM" Version="8.1.5717" /> What this effectively means is:
If a different
This of course puts the owner of the library at odds because if they upgrade to 9.0 it may break some applications and if they don't upgrade other applications won't be able to upgrade IKVM. And there is no realistic solution that works for everyone. This is moot if we actually will have breaking API changes, but we should avoid that if it is possible.
Agreed. |
Thanks. Are you saying the JDK version affects your ability to build or if you are making 2 unrelated (but helpful) comments? |
Since ikvm.net has gone offline, we are now missing binaries and documentation that could be valuable resources going forward. Is there any chance that one of you has a backup of the website files that we can put into a separate GitHub repo in the ikvm-revived organization for reference purposes? |
Oops, I see we have the HTML files. But if there is a backup of the binaries that you were hosting, it would definitely be helpful for support purposes. |
My ISP decided they wanted back the IPv4 subnet they were selling me and since (ICYMI) I have metastatic prostate cancer the site was going to go down eventually anyway and because I have different priorities nowadays I didn't bother looking for an alternative. I still have the binaries. Is there anything specific you are looking for? |
I have collected everything I found somewhat useful when dealing with IKVM. Feel free to have a look and fork or I might transfer repos into ikvm-revived and fork myself. Whatever makes more sense... https://github.com/ams-ts-ikvm/ikvm-bin |
I can build the current JDK version with our fork of IKVM (that is: with nant-0.95, targeting .NET 3.5), but applying the very same changes (that are all part of either C# or Java sources), but it's unclear which one of the branches in this repo is supposed to work. |
How long will it take to migrate to.Netcore? |
The main issues are:
I opened this issue because there are several people willing to help, but they are having trouble navigating the confusing branch and repository history of this project since it stopped being maintained by @jfrijters. While I can say for sure that the |
@NightOwl888, thanks for the clarification. If people agree that this is now the official repository for future work on IKVM, perhaps a PR that updates the As for pull requests with unclear status; adding some status checks with GitHub Actions would greatly improve that situation. The code should at least be compiled in an action to ensure that a PR doesn't break anything. Unless we are currently in a state where this thing doesn't even build? I'm sure there are people (including me) that can help with tasks such as this, but it's still difficult to understand what needs to be done, in which order and to figure out the general direction of this project. |
I've built IKVM locally to get a .Net Core version of my own project and it works beautifully. (I used a strong name key I generated and a couple of manual updates to the build files). As per the list of tasks at the top of this conversation, we're relatively close to being able to formally release a new built. I'm happy to put time into getting these tasks done. We should probably focus our efforts on one thing at at time. The first task I'd like to try and tick off is the To that end, we need to make a decision about compatibility. @jfrijters you've been very generous with your time in responding here, and I don't want to impose: if you do have the original I'm very excited about getting this moving forward! |
ikvm-key.zip |
@joniles - That's great. Thanks for stepping up. First of all, when you say you "built it for .NET Core", which branch(es) did you build? And which version of .NET Core? I have developed a common solution setup for class libraries that I use on 6 different projects. I integrated some of the features here, but there are still other features that can be migrated here. Here is a list (off the top of my head).
I agree we should tick things off one item at a time. You are welcome to migrate these build features from the following projects: Let me know if you need assistance migrating any of these features or if you feel something is out of your depth. |
Well, this is just as much of a discovery for me as it is for you. Several people have provided feedback that they were able to create a local build, but they unfortunately have never elaborated which branch they built (or branches they merged) or provided any kind of instructions, so I am in the dark just as much as you are. Unfortunately, I can't provide info that I don't have, and I am hesitant to remove information that might still have relevance from the README, as it may be required info to come up with the "new" way of doing things even if it doesn't currently work. Of course, if someone were willing to do the research, update documentation, or submit other PRs to bring this project forward such as investigating more about the specifics of what needs to be done, they are welcome to. But please don't wait for me to do the research if you expect a release soon, as I have my hands full with other projects and consider this dependency to be very low in priority at this point. As for setting up status checks, we need a working build first before we can put in the automation. I have recently setup an Azure DevOps organization at https://dev.azure.com/ikvm-revived/ and completed the integration and approval steps for parallel jobs, so we only need to bring the templates over from our other projects once we have a build. And of course, @ripenko was kind enough to provide permission to the NuGet.org package so it can be uploaded and and @jfrijters was kind enough to provide the snk file for the build. |
A quick note to provide some missing information from me, here are the instructions to reproduce the build of IKVM I'm using in my project (MPXJ): The version of IKVM used to build MPXJ for .Net Core is from this branch of ikvm-revived/ikvm. Build instructions:
Note that the native DLLs aren't built by the instructions above. |
@joniles - Thanks. So, if I understand correctly, #25 and #38 can be merged, correct? Although, I took a peek at #25 and noticed that the The only one of the open tasks I am unsure about is "building missing parts for the core", but I suppose putting a prerelease on NuGet will start people reporting what isn't working, which can only help move us along. |
@NightOwl888: yes #38 is definitely good to go. With regard to #25, do we want to keep developing against/merging into this branch until we're ready to release, or are we happy to start working against Regarding |
Agreed I think it would be better to keep PRs short lived so we can pool resources on So are we good to go right now? Or do you have open work that targets one of these branches?
Alright, that makes sense. The way it was set up here originally, the root
but now that needs to be changed to
Then each project can simply add a list like below, and the attributes will be output automatically.
Does Dotnet ToolsSome of the command line tools either were (or could be) converted to dotnet tools so they can be installed a NuGet package simply by using the dotnet commands. While we should take things one step at a time, this pertains to setting up the NuGet packaging, so should be taken into account when that is done. There are examples here of dotnet tools. Converting a command line tool to a dotnet tool generally isn't very complicated and allows leveraging the same deployment mechanism as the DLLs so the build and deployment is simpler. https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools-how-to-create That being said, I am 100% sure that will work on the .NET Core side, but not sure whether there are any blocking issues that will prevent a .NET Core-based command line tool to build the .NET Framework bits, or whether we will need a separate assembly for .NET Framework. Do you think you could find an answer to whether a single set of tools will work for building IKVM assemblies on both .NET Framework and .NET Core or whether separate assemblies are required? I also just discovered that it is possible to multi-target dotnet tools, which I have confirmed several of the projects on the above list are doing. So, we can add targets so the tools will work across major versions of .NET depending on which version is installed on the target machine. Of course, I suspect this doesn't have any .NET Framework support, but if we need a separate tool version for .NET Framework, we might be able to include it in the package, anyway. |
I think so, I don't have any further changes to make to those branches.
I think keeping the
This is an interesting question. For my own use case when I'm packaging my project for distribution, I only really need the command line tools, which historically I'd have retrieved and unpacked from a zip file, so I'm hoping we retain that option and host simple zipped up releases here on GitHub. Arguably retrieving the IKVM tools as part of a Nuget package doesn't offer me much, particularly if there is an extra step for me to install the tools from the package before I can use them. Stable Nuget packages for me will be the big benefit for my downstream consumers as I won't have to bundle the IKVM assemblies, I can just reference them from the package I build. I appreciate my use case may be a bit odd though! |
Dotnet Tools
Actually, I am not sure whether putting the tool into the IKVM NuGet package is possible (I guess nothing would prevent it if you wanted to do that, though). What I meant was create 1 NuGet package per executable. In general, it is usually best to keep 1 DLL in each NuGet package also, but maybe that wouldn't be the best approach for this project. Of course, to convert it to a dotnet tool, it would make more sense to have 1 executable that contains several different commands rather than having multiple executables. Then every command could be The workflow doesn't require you to install the tool every time you use it. You can install it globally on the machine and then use it as many times as you like. I don't know whether this project will drift enough to require the versions to match between executable and DLLs, but it is something that can probably be automated. A huge advantage of using a dotnet tool is that automation is simpler. Since the As for downloading the binaries:
Keep in mind that executables on .NET Core are no longer xCopy - they need to be published before they can be deployed. The dotnet pack command automatically makes the tool portable, so no publish is required. Of course there is nothing wrong with publishing the files and including them for download on the GitHub releases page for those who want to use the old school download approach, it is just extra steps for the release procedure. Unfortunately, while the APIs are there to automate creating a GitHub release, I haven't yet discovered a way to automate "release notes" (as the commit log usually contains commits that need to be summarized better than the commit message), so for now I do that step manually. But we could probably add a build step to automate a GitHub draft release that pushes all of the relevant binaries so it doesn't take extra manual work to upload them to GitHub. InternalsVisibleToI am in the process of creating a PR to fix this on the ikvm-build branch before it is merged. There was another condition that was added since I contributed it that I didn't mention above which prevents it from firing for packages that don't have |
We have a really cool bot, which can manage and suggest updates the installed versions you reference in your projects. Checkout renovate, i use it for daily work for our dotnet and npm projects. It can do more languages too. So to install your simply do Renovate will just send you Pr's (like dependabot) to suggest the right updates. |
I have submitted #41 with some updates, but unfortunately specifying an snk using the file path doesn't seem to function like it does when putting the snk in the keystore. I couldn't find a solution. But I have confirmed all but the last commit (enabling the snk) will compile on .NET Core by checking out the one prior. This post was somewhat helpful: https://ikvm-developers.narkive.com/0VenMex7/ikvmc-cannot-sign-with-strong-name-key I also noticed that the I will leave this in your capable hands. Please base your changes on the ikvm-build-2 branch and target it when submitting a PR. I will merge everything back to master when we have functioning builds on both .NET Core and .NET Framework. Dotnet ToolsAfter poking around a bit, I can see this is going to take more work than I thought. Even using the simple approach of using the template as a wrapper to convert parameters from the newer format to the original won't quite work because I noticed that some fields that expect file paths don't seem to have a way to escape if they have a space in the path. I still think it is worth the effort to do this, but I concede that it isn't required for the first prerelease(s) that we publish. It is something that can be added to the build later. |
Moved #45 |
You should document that as individual issue and link here only. |
Is there a zip file somewhere that has all the binaries, both dlls and the ikvmc.exe? We're targeting .Net Framework 4.8 and have been using the ikvm 7 for years but need Java 8 support now. Thanks |
We have released our first preview version of IKVM with .NET Core support. Please run it through its paces and report any issues you are seeing by opening a new issue. |
Hello. Version 8.2.0-prerelease0379 cipher cipher = null;, I define it as Cipher.getInstance("AES/ECB/PKCS5Padding"); I am getting error in method. |
Could you please open a new issue with that info so we can track it separately? |
A new issue has been opened. |
First, thanks very much for your work on the .NET core version. I wonder where I can find the ikvmc.exe in prerelease.809? |
All of the tools are available in |
Thanks, the tools has ikvmc.exe. However, when I launched it, it has below error, anyone knows how to resolve? Is it SDK version related? I google but with no clue...
|
Please report this as a new issue so we can track it individually. |
here it is #74 |
it seems 809 is latest, but on nuget.org 911 is latest, so there are also some github releases missing. |
Looks like the last 3 GitHub releases are still in "draft" status. They all have the same "what's changed" section, though (all of them are pointing to prerelease.809 for the beginning of the changelog). @wasabii - I know I can change them to "real" releases through the control panel, but is there some compelling reason why they are still draft releases? Like maybe you were planning to change the release notes first? |
@NightOwl888 I created #84 to fix it |
Hiya. I thought it would be good to do it manually, after verifying everything was okay and to fix the release notes. |
@wasabii But it seems the verify step got forgotten for latest releases 🙃 So i would suggest to publish them right away. Missing releases are more worth than wrong release notes 🤷♂️ |
This is the official IKVM repository where efforts are being consolidated to add support for .NET Core/.NET 5/.NET 6, however we don't currently have a package on NuGet.org, which is a blocker for many people.
The latest release of IKVM is the package released by Windward Studios and is available on NuGet.org, however efforts to continue that work to port to .NET Core have been moved here.
It would be appreciated if others working on ikvm-revived help keep this list updated with the latest info (wiki style) so those willing to contribute know where to focus their efforts.
Discord
We have set up a Discord server to collaborate on the remaining work: https://discord.gg/MpzNd5Tk8P
The text was updated successfully, but these errors were encountered: