Skip to content
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

Support extern alias in generated code. #2289

Open
teo-tsirpanis opened this issue Mar 18, 2023 · 5 comments
Open

Support extern alias in generated code. #2289

teo-tsirpanis opened this issue Mar 18, 2023 · 5 comments

Comments

@teo-tsirpanis
Copy link
Contributor

I was benchmarking the old and new version of my library and the benchmark methods were returning objects of a type with the same name from the old or new assembly. I can't vary the NuGet package versions because the new version is not yet released and the API is different.

In my benchmark code I used extern alias to point to the old library but this did not carry over to the code BenchmarkDotNet generated, causing error CS0433: The type 'Grammar' exists in both 'Farkle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'FarkleNeo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

I found a workaround by returning object so I guess it's a pretty niche scenario.

@timcassell
Copy link
Collaborator

timcassell commented Jul 27, 2023

For this to be done automatically, this is blocked by #1403 (unless we want to pass /r arguments to the compiler). We also will need to figure out how to determine when to use extern alias (I suspect we'll have to scan all assemblies for the type to check for duplicated Type.FullName, since we don't have the /r compilation information at runtime).

We could possibly expose an API to support this case manually, but I'd prefer not to.

@timcassell
Copy link
Collaborator

@teo-tsirpanis How did you get it to work outside of BDN? When I try, I hit this long-standing issue. dotnet/msbuild#4943

I'm not sure if we can support this in BDN if msbuild doesn't even properly support it.

@teo-tsirpanis
Copy link
Contributor Author

In my case the two assemblies have different names (one is called Farkle and the other is called FarkleNeo). I use extern alias in my benchmark, and because I return object from my methods, the auto-generated files don't require to use extern alias.

@Madajevas
Copy link

Any update or workaround for this?

@teo-tsirpanis
Copy link
Contributor Author

You can avoid exposing the extern aliased type in the signature of your benchmark methods. For my case I changed the methods to return object.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants