Bug 41665 - [Cycle 7, VS 2013 only] "'System.ComponentModel.INotifyPropertyChanged' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.ObjectModel" for Android projects that reference PCLs that use `INotifyPropertyChanged`
Summary: [Cycle 7, VS 2013 only] "'System.ComponentModel.INotifyPropertyChanged' is de...
Status: VERIFIED FIXED
Alias: None
Product: Android
Classification: Xamarin
Component: MSBuild (show other bugs)
Version: 6.1.0 (C7)
Hardware: PC Windows
: High major
Target Milestone: 7.1 (C9)
Assignee: dean.ellis
URL:
Depends on:
Blocks:
 
Reported: 2016-06-09 17:37 UTC by Brendan Zagaeski (Xamarin Team, assistant)
Modified: 2016-10-03 14:46 UTC (History)
6 users (show)

Tags: BZRC7S1_C6SR4S1, DefectEscapeReview_Done
Is this bug a regression?: Yes
Last known good build: XamarinVS 4.0.4.4 (a9c7826)


Attachments
Diagnostic build output, detailed version info (109.37 KB, application/zip)
2016-06-09 17:37 UTC, Brendan Zagaeski (Xamarin Team, assistant)
Details


Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.


Please create a new report on Developer Community or GitHub with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:
Status:
VERIFIED FIXED

Description Brendan Zagaeski (Xamarin Team, assistant) 2016-06-09 17:37:49 UTC
Created attachment 16253 [details]
Diagnostic build output, detailed version info

[Cycle 7, VS 2013 only] "'System.ComponentModel.INotifyPropertyChanged' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.ObjectModel" for Android projects that reference PCLs that use `INotifyPropertyChanged`




## Workaround

Add a reference to `System.ObjectModel` [1] to the Android app project, as indicated by the error.

[1] C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\Facades\System.ObjectModel.dll


(Note to the Xamarin engineering team: This doesn't feel like it should be the _intended_ way to fix the error for users moving forward because the "System.ObjectModel" facade assembly does not appear as an option in the graphical Reference Manager under "Project > Add Reference".)




## Regression status: regression in Cycle 7 that only affects the VS 2013 version of `msbuild` on Windows

BAD:  XamarinVS 4.1.0.530 (2e39740) + VS 2013
GOOD: XamarinVS 4.0.4.4   (a9c7826) + VS 2013


GOOD: XamarinVS 4.1.0.530 (2e39740) + VS 2015

GOOD: Xamarin.Android 6.1.0.71 (4e27558) on Mac




## Steps to replicate


1. Download the "XAML Samples" sample [1].

[1] https://developer.xamarin.com/samples/xamarin-forms/XAMLSamples/

(Note: It is possible to replicate the problem in a new "Visual C# > Cross-Platform > Blank App (Xamarin.Forms Portable)"


2. Attempt to build the "XamlSamples.Android" project in the "Debug|Any CPU" configuration, using Visual Studio 2013 (or the corresponding version of `msbuild`) on Windows.




## BAD Results (on XamarinVS 4.1.0.530)

The build fails with an error:

> The type 'System.ComponentModel.INotifyPropertyChanged' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.	C:\source\XAMLSamples\XamlSamples\XamlSamples.Android\MainActivity.cs	26	13	XamlSamples.Android




## GOOD Results (on XamarinVS 4.0.4.4)

The build completes without error.




## Additional version info (brief)

Microsoft Visual Studio Professional 2013
Version 12.0.40629.00 Update 5

Windows 10 (64-bit)
Comment 1 Brendan Zagaeski (Xamarin Team, assistant) 2016-06-09 18:21:07 UTC
One other potentially interesting comment about this issue: my VS 2013 test environment does have Microsoft Build Tools 2015 installed.  I vaguely recall hearing something about some efforts to perhaps make it possible to use C# 6.0 features in Xamarin projects in VS 2013?  If the intention was that all Xamarin builds (even in VS 2013) were supposed to start _requiring_ Microsoft Build Tools 2015, the fact that that is _not_ happening might be the overarching issue in this case.
Comment 2 dean.ellis 2016-06-10 11:51:06 UTC
Comparing the build outputs the CSC task in VS2013 is NOT being passed the System.ObjectModel.dll Facade assembly and the VS2015 is. The real question is why the different behaviour between the two systems.
Comment 3 dean.ellis 2016-06-10 13:53:55 UTC
The latest update makes use of Java.Interop which relies on System.Runtime.dll . However it seems that while VS2015 is great at auto picking up that fact VS2013 is not. The task RefolveAssemblyReference (according to the docs) does NOT set $(DependsOnSystemRuntime) when in the VS2013 tool chain. As a result none of our custom PCL Facades tasks were running. 

Adding the reference to System.ObjectModel.dll just hides the problem. If a different assembly was required you'd end up with and error for that too. 

The fix is to manually set $(DependsOnSystemRuntime) in our build targets. Since we relay on System.Runtime now anyway it should be have any impact.
Comment 4 dean.ellis 2016-06-10 17:46:59 UTC
Fixed in monodroid/cycle7/0b942506
and xamarin-android/master/eea35c8b
Comment 5 narayanp 2016-06-15 18:24:49 UTC
I am able to reproduce this issue with Xamarin.VisualStudio_4.1.0.530 and here
is the build output for the same.

Build Output:
Gist: https://gist.github.com/Abhishekk360/36ce8863f5d1476c7f759f1c1a292a13

I have checked this issue with the Xamarin.VisualStudio_4.1.0.543 and observed that now the issue is working fine as shown in the screencast.

Screencast: http://www.screencast.com/t/uf204Ac46ata

Build Output:
Gist: https://gist.github.com/Abhishekk360/226cc0af79e80b263cb8fee9bce61c19

Environment Info:
Gist: https://gist.github.com/Abhishekk360/573c291caf7ff7b79172d2fdf0de71fa
Comment 6 Arpit Jha 2016-06-17 13:10:26 UTC
I have checked this issue with C7SR0 build Xamarin.VisualStudio_4.1.0.534_3ae9e4f4330b98bda4844463c43a659f9214edbd and now its working fine.

Screencast : http://www.screencast.com/t/i3g4ORtBflVX

Environment Info: https://gist.github.com/Arpit360/8566d530f19c706c14bc220df3781f4b